SpringBoot2.0以上整合zipkin使用rabbitmq接收消息

  • A+
所属分类:zipkin

网上很多教程都是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相关的参数如下:

PropertyEnvironment VariableDescription
zipkin.collector.rabbitmq.concurrencyRABBIT_CONCURRENCYNumber of concurrent consumers. Defaults to 1
zipkin.collector.rabbitmq.connection-timeoutRABBIT_CONNECTION_TIMEOUTMilliseconds to wait establishing a connection. Defaults to 60000 (1 minute)
zipkin.collector.rabbitmq.queueRABBIT_QUEUEQueue from which to collect span messages. Defaults to zipkin
zipkin.collector.rabbitmq.uriRABBIT_URIRabbitMQ URI spec-compliant URI, ex. amqp://user:pass@host:10000/vhost

If the URI is set, the following properties will be ignored.

PropertyEnvironment VariableDescription
zipkin.collector.rabbitmq.addressesRABBIT_ADDRESSESComma-separated list of RabbitMQ addresses, ex. localhost:5672,localhost:5673
zipkin.collector.rabbitmq.passwordRABBIT_PASSWORDPassword to use when connecting to RabbitMQ. Defaults to guest
zipkin.collector.rabbitmq.usernameRABBIT_USERUsername to use when connecting to RabbitMQ. Defaults to guest
zipkin.collector.rabbitmq.virtual-hostRABBIT_VIRTUAL_HOSTRabbitMQ virtual host to use. Defaults to /
zipkin.collector.rabbitmq.use-sslRABBIT_USE_SSLSet 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

如图,启动成功。

SpringBoot2.0以上整合zipkin使用rabbitmq接收消息

访问zipkin的管理界面http://localhost:9411/zipkin

SpringBoot2.0以上整合zipkin使用rabbitmq接收消息

这时进入rabbitmq的管理界面http://localhost:15672,进入queues菜单就可以看到多出了一个zipkin队列。这样就说明zipkin-server可以接收rabbitmq的消息了。

SpringBoot2.0以上整合zipkin使用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的管理界面可以看到相应的结果。

SpringBoot2.0以上整合zipkin使用rabbitmq接收消息

 

以上,over。表达能力有限,如果有任何问题,欢迎留言交流。

 

ZPY

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: