Gateway+Nacos+Sleuth+Zipkin网关链路追踪(测试及源码),Gateway+FeignClient+Nacos通过网关远程调用微服务(一)

  • 问题背景
    • Gateway+Nacos+Sleuth+Zipkin网关链路追踪(测试及源码),Gateway+FeignClient+Nacos通过网关远程调用微服务(一)
    • Gateway+Nacos+Sleuth+Zipkin网关链路追踪(测试及源码),Gateway+Nacos+Sleuth链路追踪(二)
    • Gateway+Nacos+Sleuth+Zipkin网关链路追踪(测试及源码),Gateway+Nacos+Zipkin安装部署可视化http方式链路追踪(三)
    • Gateway+Nacos+Sleuth+Zipkin网关链路追踪(测试及源码),Gateway+Nacos+Zipkin持久化mysql存储rabbitmq消息队列链路追踪(四)
  • 项目搭建
    • 1 gateway网关搭建
  • 2 service1项目搭建
    • 3 service2项目搭建
  • 测试步骤
  • 心得
  • Lyric: 种麦芽糖的山坡

问题背景

使用gateway网关远程调用微服务非常常用,并配合追踪链路,本文先介绍使用gateway网关配置路由的方式访问远程微服务
注意事项:

  • 默认JDK环境
  • nacos服务器的搭建和外部调用微服务的方式可以参考我的另一篇文章
  • 大家可以通过本文的代码自己创建工程,也可以直接下载本文源码

Gateway+Nacos+Sleuth+Zipkin网关链路追踪(测试及源码),Gateway+FeignClient+Nacos通过网关远程调用微服务(一)

Gateway+Nacos+Sleuth+Zipkin网关链路追踪(测试及源码),Gateway+Nacos+Sleuth链路追踪(二)

Gateway+Nacos+Sleuth+Zipkin网关链路追踪(测试及源码),Gateway+Nacos+Zipkin安装部署可视化http方式链路追踪(三)

Gateway+Nacos+Sleuth+Zipkin网关链路追踪(测试及源码),Gateway+Nacos+Zipkin持久化mysql存储rabbitmq消息队列链路追踪(四)

项目搭建

1 gateway网关搭建

1.1 创建gateway工程,引入pom依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.1.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.yg</groupId><artifactId>gateway</artifactId><version>0.0.1-SNAPSHOT</version><name>gateway</name><description>gateway</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId>
<!--            <version>2.1.0.RELEASE</version>--></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId>
<!--            <scope>test</scope>--></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<!--            <version>2.1.0.RELEASE</version>--></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Hoxton.RELEASE</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.2.1.RELEASE</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build>
</project>

1.2 添加application配置,- Path=/three/** #路径匹配规则,微服务控制类必须有一个统一的入口区分域,不然网关不能访问,@RequestMapping("/three"),@RequestMapping("/four")

server:port: 3900spring:application:name: gatewaycloud:nacos:discovery:server-addr: localhost:8848gateway:discovery:locator:enabled: truelower-case-service-id: true
#      routes:
#        - id: service2  #设置路由id(理论上是可以随便写的)
#          uri: lb://service2 #设置路由的url lb://nacos服务注册名称 lb://service1 http://localhost:3901
#          predicates:
#            - Path=/three/** #路径匹配规则,微服务必须有一个统一的入口,不然网关不能访问,@RequestMapping("/three")
#        - id: service1  #设置路由id(理论上是可以随便写的)
#          uri: lb://service1 #设置路由的url lb://nacos服务注册名称 lb://service1 http://localhost:3901
#          predicates:
#            - Path=/four/** #路径匹配规则,@RequestMapping("/four")

1.3 gateway启动类

package com.yg.gateway;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@SpringBootApplication
@EnableDiscoveryClient
public class GatewayApplication {public static void main(String[] args) {SpringApplication.run(GatewayApplication.class, args);}}

2 service1项目搭建

2.1 创建service1项目,引入pom公共依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.yg</groupId><artifactId>sleuthTest</artifactId><version>0.0.1-SNAPSHOT</version><packaging>pom</packaging><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.1.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><modules><module>service1</module><module>service2</module></modules><name>sleuthTest</name><description>sleuthTest</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId><version>2.1.0.RELEASE</version></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<!--            <version>2.1.0.RELEASE</version>--></dependency></dependencies><dependencyManagement><dependencies><!--Spring Cloud--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Hoxton.RELEASE</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.2.1.RELEASE</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build></project>

2.2 引入service1单独的pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.yg</groupId><artifactId>service1</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><parent><groupId>com.yg</groupId><artifactId>sleuthTest</artifactId><version>0.0.1-SNAPSHOT</version></parent><name>service1</name><description>service1</description><properties><java.version>1.8</java.version></properties><dependencies></dependencies></project>

2.3 service1启动类,添加@EnableDiscoveryClient、@EnableFeignClients注解

package com.yg.service1;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;@EnableFeignClients
@SpringBootApplication
@EnableDiscoveryClient
public class Service1Application {public static void main(String[] args) {SpringApplication.run(Service1Application.class, args);}
}

2.4 添加application配置,添加nacos注册中心

server:port: 3901spring:application:name: service1cloud:nacos:discovery:server-addr: localhost:8848  # 以服务名进行注册

2.5 创建controller类

package com.yg.service1.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/four")
public class Service1Controller {@Autowiredprivate Service2Controller service2Controller;@GetMapping("/t1")public String test(){System.out.println("Test success");return "I am YuanGe";}@GetMapping("/test1")public String test1(){System.out.println("test11111");System.out.println(service2Controller.getTest2());return "I am test11111";}
}

2.6 创建feignclient远程调用接口类

package com.yg.service1.controller;import com.yg.service1.fallback.Service2ControllerFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;@FeignClient(value = "service2",fallbackFactory = Service2ControllerFallbackFactory.class)
public interface Service2Controller {@GetMapping("/three/test2")String getTest2();
}

2.7 实现FallbackFactory

package com.yg.service1.fallback;import com.yg.service1.controller.Service2Controller;
import feign.hystrix.FallbackFactory;
import org.springframework.stereotype.Component;@Component
public class Service2ControllerFallbackFactory implements FallbackFactory<Service2Controller> {@Overridepublic Service2Controller create(Throwable throwable) {return null;}
}

3 service2项目搭建

3.1 引入pom依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.yg</groupId><artifactId>service2</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><parent><groupId>com.yg</groupId><artifactId>sleuthTest</artifactId><version>0.0.1-SNAPSHOT</version></parent><name>service2</name><description>service2</description><properties><java.version>1.8</java.version></properties><dependencies></dependencies>
</project>

3.2 添加application配置

server:port: 3902spring:application:name: service2cloud:nacos:discovery:server-addr: localhost:8848

3.3 service2启动类

package com.yg.service2;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@SpringBootApplication
@EnableDiscoveryClient
public class Service2Application {public static void main(String[] args) {SpringApplication.run(Service2Application.class, args);}
}

3.4 service2控制类

package com.yg.service2.controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/three")
public class Service2Controller {@GetMapping("/t2")public String test(){System.out.println("Received");return "I am YuanGe";}@GetMapping("/test2")public String test2(){System.out.println("test22222");return "I am test22222";}}

3.5 整体项目架构目录

测试步骤

1 启动nacos服务端,gateway,service1,service2



2 查看注册中心页面http://localhost:8848/nacos/,账号密码都为:nacos

3 使用service1微服务名远程调用service2微服务


心得

  • 在测试的途中都遇到了几个小问题,写了一个错误的配置如下,- Path=/** #这样写没有问题,但是控制类需要属于不同的域,如果没有在控制类上写上@RequestMapping注解,微服务过多就找不到API了

spring:application:name: gatewaycloud:gateway:routes:- id: service2  uri: lb://service2 predicates:- Path=/** #这样写单服务是没有问题,但是微服务有两个及以上,控制类需要属于不同的域,如果没有在控制类上写上@RequestMapping注解,微服务过多就找不到API了- id: service1  uri: lb://service1 predicates:- Path=/**

service2和service1分别添加@RequestMapping("/three"),@RequestMapping("/four")注解,更改写法:

spring:application:name: gatewaycloud:gateway:routes:- id: service2  #设置路由id(理论上是可以随便写的)uri: lb://service2 #设置路由的url lb://nacos服务注册名称 lb://service1 http://localhost:3901predicates:- Path=/three/** #路径匹配规则,微服务必须有一个统一的入口,不然网关不能访问,@RequestMapping("/three")- id: service1  #设置路由id(理论上是可以随便写的)uri: lb://service1 #设置路由的url lb://nacos服务注册名称 lb://service1 http://localhost:3901predicates:- Path=/four/** #路径匹配规则,@RequestMapping("/four")


作为程序员第 18 篇文章,每次写一句歌词记录一下,看看人生有几首歌的时间,wahahaha …

Lyric: 种麦芽糖的山坡

Gateway+Nacos+Sleuth+Zipkin网关链路追踪(测试及源码),Gateway+FeignClient+Nacos通过网关远程调用微服务(一)相关推荐

  1. SpringCloud 2020版本教程4:使用spring cloud sleuth+zipkin实现链路追踪

    点击关注公众号,Java干货及时送达 Spring Cloud Sleuth 主要功能就是在分布式系统中提供追踪解决方案,并且兼容支持了 zipkin,你只需要在pom文件中引入相应的依赖即可. 微服 ...

  2. Spring Cloud Alibaba 高级特性 基于 Sleuth+Zipkin 实施链路跟踪体系

    介绍微服务链路追踪的原理: 讲解基于 Spring Cloud Sleuth 实现链路追踪: 构建 Zipkin Server 实现链路追踪的可视化管理. 下面咱们先来介绍什么是微服务链路追踪. 微服 ...

  3. graylog+kafka+zookeeper(单机测试及源码),微服务日志查询使用(七)

    graylog+kafka+zookeeper(单机测试及源码),微服务日志查询使用(七) 问题背景 graylog+kafka+zookeeper(单机测试及源码),graylog组件部署,查找问题 ...

  4. 实际测试例子+源码分析的方式解剖MyBatis缓存的概念

    前言: 前方高能! 本文内容有点多,通过实际测试例子+源码分析的方式解剖MyBatis缓存的概念,对这方面有兴趣的小伙伴请继续看下去~ 欢迎工作一到五年的Java工程师朋友们加入Java架构开发:79 ...

  5. graylog+kafka+zookeeper(单机测试及源码),graylog设置URL报警方式(五)

    graylog+kafka+zookeeper(单机测试及源码),graylog设置URL报警方式(五) 问题背景 graylog+kafka+zookeeper(单机测试及源码),graylog组件 ...

  6. graylog+kafka+zookeeper(单机测试及源码),graylog组件部署,查找问题分析(一)

    graylog+kafka+zookeeper(单机测试及源码),graylog组件部署,查找问题分析(一) 问题背景 graylog+kafka+zookeeper(单机测试及源码),graylog ...

  7. graylog+kafka+zookeeper(单机测试及源码),kafka+zookeeper组件部署(二)

    graylog+kafka+zookeeper(单机测试及源码),kafka+zookeeper组件部署(二) 问题背景 graylog+kafka+zookeeper(单机测试及源码),graylo ...

  8. graylog+kafka+zookeeper(单机测试及源码),graylog收集kafka(脚本创建发布订阅方式)存储的消息(四)

    graylog+kafka+zookeeper(单机测试及源码),graylog收集kafka(脚本创建发布订阅方式)存储的消息(四) 问题背景 graylog+kafka+zookeeper(单机测 ...

  9. graylog+kafka+zookeeper(单机测试及源码),graylog测试用例及源码(三)

    graylog+kafka+zookeeper(单机测试及源码),graylog测试用例及源码(三) 问题背景 graylog+kafka+zookeeper(单机测试及源码),graylog组件部署 ...

最新文章

  1. ACM常用之 异或运算的性质。
  2. Deep Belief Networks
  3. vue或js解析文件excel表格js通过插件解析表格读取文件
  4. 山寨版项目管理经验小结
  5. python执行shell脚本、执行mongodb_mongodb执行js脚本(一)---shell执行
  6. 用卷积神经网络识别实际田间条件下茶叶病虫害(自然环境下拍摄的数据集不用太多预处理)
  7. [BZOJ2850]巧克力王国
  8. jacob将word转换为html
  9. windows下的Zcash钱包(ZEC钱包)-zcash4win 1.0.11
  10. 计算机界面视频录制软件,怎么进行电脑界面上的画面录制,推荐下好用的电脑录屏软件呗...
  11. R:应用时间序列分析--基于R(1)第一章 时间序列分析简介
  12. 硬件第一节 三级管电路工作原理及详解
  13. linux c第四天———gcc、gdb、指针、大小端存储
  14. tplink控制上网设备_tp link无线路由器设置里的主人设备 访客网络
  15. mysql8.0.15下载后怎么打开_mysql8.0.15下载安装详细教程新手必备!
  16. 如何在word里面打对勾
  17. 《徐卓-心理咨询师校园报告 》--心得
  18. mysql explain type_MySQL explain type详解
  19. GNS3 安装图解 简单易学 多操作几遍就能记住
  20. Web全栈~26.IO

热门文章

  1. B. Game on Ranges
  2. 【读书笔记】《怪诞行为学》丹·艾瑞里
  3. 使用手机可以在线拍照、翻译图片文字吗?
  4. 用友NC二次开发问题汇总【转】
  5. python的mag模块_Python Decimal max_mag()用法及代码示例
  6. FaceID-GAN:Learning a Symmetry Three-Player GAN for Identity-Preserving Face Synthesis论文翻译和解读
  7. Mathematica做微积分
  8. 小程序~获取手机号getPhoneNumber提示该appid没有权限
  9. 新版本 印象笔记 markdown语法大全 !!!
  10. 1985-2020年全球30米地表覆盖精细分类产品V1.0免费下载,内附链接