- A+
网上很多教程都是SpringBoot 1.5.x版本整合zipkin使用rabbitmq接收消息。
首先从结论开始说起吧,用SpringBoot 2.x.x版本可以成功整合zipkin,但是只能用默认的http形式发送/接收消息,如何使用rabbitmq的方式我按现在网上所有的教程都试过一遍,结果都是不行。有一个最接近成功的版本是zipkin-server和zipkin-service都能正常启动不报错,zipkin-service也能正常向rabbitmq中成功发送消息,但zipkin-server接收不到rabbitmq的消息。
下面就来讲一讲SpringBoot 2.x.x版本如何整合zipkin使用rabbitmq接收消息。
SpringBoot 2.x.x版本开始已经不推荐自定义zipkin-server了,官方推荐的是在官网下载jar包,直接启动zipkin-server即可。所以一开始的方向就错了,因为一开始我是在使用默认的http形式发送/接收消息的那个zipkin-server工程上来改的方式来实现rabbitmq的。
正确的做法是不用自己弄zipkin-server这个工程了,直接从github下载吧。
下载地址:
https://github.com/openzipkin/zipkin
下载好zipkin-server-2.15.0-exec.jar文件后,直接在命令行里通过java -jar zipkin-server-2.15.0-exec.jar就可以将zipkin-server给启动成功。但是这样有一个问题是,我们自己建的工程里是指定了rabbitmq的地址的,这样启动没有指定rabbitmq的地址肯定是不行的。我们得加上相应的启动参数。查询了github的介绍,rabbit相关的参数如下:
Property | Environment Variable | Description |
---|---|---|
zipkin.collector.rabbitmq.concurrency | RABBIT_CONCURRENCY | Number of concurrent consumers. Defaults to 1 |
zipkin.collector.rabbitmq.connection-timeout | RABBIT_CONNECTION_TIMEOUT | Milliseconds to wait establishing a connection. Defaults to 60000 (1 minute) |
zipkin.collector.rabbitmq.queue | RABBIT_QUEUE | Queue from which to collect span messages. Defaults to zipkin |
zipkin.collector.rabbitmq.uri | RABBIT_URI | RabbitMQ URI spec-compliant URI, ex. amqp://user:pass@host:10000/vhost |
If the URI is set, the following properties will be ignored.
Property | Environment Variable | Description |
---|---|---|
zipkin.collector.rabbitmq.addresses | RABBIT_ADDRESSES | Comma-separated list of RabbitMQ addresses, ex. localhost:5672,localhost:5673 |
zipkin.collector.rabbitmq.password | RABBIT_PASSWORD | Password to use when connecting to RabbitMQ. Defaults to guest |
zipkin.collector.rabbitmq.username | RABBIT_USER | Username to use when connecting to RabbitMQ. Defaults to guest |
zipkin.collector.rabbitmq.virtual-host | RABBIT_VIRTUAL_HOST | RabbitMQ virtual host to use. Defaults to / |
zipkin.collector.rabbitmq.use-ssl | RABBIT_USE_SSL | Set to true to use SSL when connecting to RabbitMQ |
我们知道,一般rabbitmq需要指定四个参数,分别是主机名,端口,用户名和密码。
这里有两种方法,一种是通过指定RABBIT_URI
的方式 ,这种方式同时将上面四个参数都带上了,就不用指定四个参数了,很方便,如amqp://user:pass@host:10000/vhost
但是,端口,用户名,密码都是有默认值的,也就是rabbit默认的5672端口,用户名、密码都是默认的guest,所以如何你没有修改rabbit这些默认的配置,也可以只指定RABBIT_ADDRESSES这一个参数。
我采用指定RABBIT_ADDRESSES 的方式。
启动命令为:java -jar zipkin-server-2.15.0-exec.jar --zipkin.collector.rabbitmq.addresses=localhost:5672
如图,启动成功。
访问zipkin的管理界面http://localhost:9411/zipkin
这时进入rabbitmq的管理界面http://localhost:15672,进入queues菜单就可以看到多出了一个zipkin队列。这样就说明zipkin-server可以接收rabbitmq的消息了。
下面在zipkin的客户端做如下改动。
1)加上以下依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> <version>RELEASE</version> </dependency> <dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit</artifactId> </dependency>
其中springcloud的版本为
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Greenwich.SR1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
2)yml文件相关的配置为:
spring: application: name: zipkin-service zipkin: sender: type: rabbit sleuth: sampler: percentage: 1.0 cloud: nacos: discovery: server-addr: localhost:8848 rabbitmq: host: localhost port: 5672 username: guest password: guest
经过以上两步,zipkin的客户端就改造完毕了。
访问客户端的接口,在zipkin的管理界面可以看到相应的结果。
以上,over。表达能力有限,如果有任何问题,欢迎留言交流。