springboot整合spring cloud stream实现多mq对接过程中遇到的相关问题

26 篇文章 1 订阅

1.springboot整合spring cloud stream实现多mq对接
2.pom引入如下关键依赖,注意springcloud版本和springboot的版本关系,要版本相对应,一下已引入springcloud版本管理,复制使用即可

	<properties>
		<java.version>1.8</java.version>
		<spring-cloud.version>Greenwich.SR3</spring-cloud.version>
	</properties>
		<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-stream</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-stream-binder-rabbit</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-stream-test-support</artifactId>
            <scope>test</scope>
        </dependency>
        <dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>${spring-cloud.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

2.添加配置文件

spring:
  cloud:
    stream:
      bindings:
        input:
          destination: testQueue
          binder: testBinder
          group: aaaa
        output:
          destination: testQueue
          binder: testBinder
          group: aaaa
        intwo:
          destination: testQueue2
          binder: testBinder2
          group: bbb
        outtwo:
          destination: testQueue2
          binder: testBinder2
          group: bbb
      binders:
        testBinder:
          type: rabbit
          environment:
            spring:
              rabbitmq:
                host: 你自己的mqip
                port: 5672
                username: 用户名
                password: 密码

        testBinder2:
          type: rabbit
          environment:
            spring:
              rabbitmq:
                host: 你自己的mqip
                port: 5672
                username: 用户名
                password: 密码

3.编写bingder配置类

import org.springframework.cloud.stream.annotation.Input;
import org.springframework.cloud.stream.annotation.Output;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.SubscribableChannel;
import org.springframework.stereotype.Component;

@Component
public interface MyProcessor {
     String intwo = "intwo";

    String outtwo = "outtwo";



    @Input(value = intwo)
    SubscribableChannel intwo();

    @Output(value = outtwo)
    MessageChannel outtwo();

}

4.启动类把配置类引进来,可以配置多个,其中只有一个是默认配置类
该注解添加在应用启动类上

@EnableBinding(value = {Processor.class,MyProcessor.class})

5.编写消息发送,以下代码发送的数据将使用inttwo接收

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.Message;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/tt")
public class TestController {

    @Autowired
    MyProcessor myProcessor;

    @RequestMapping("/test/{msg}")
    public void test(@PathVariable("msg")String msg){
        Message<String> build = MessageBuilder.withPayload(msg).build();
        myProcessor.outtwo().send(build);
    }
}

6.编写消息监听


import org.springframework.cloud.stream.annotation.StreamListener;
import org.springframework.cloud.stream.messaging.Processor;
import org.springframework.cloud.stream.messaging.Source;
import org.springframework.stereotype.Component;

@Component
public class MultiTest {

    @StreamListener(Processor.INPUT)
    public void processMyMessage(String message) {
        System.out.println("接收到消息:" + message);
    }

    @StreamListener(MyProcessor.intwo)
    public void processMyMessage2(String message) {
        System.out.println("接收到消息intwo:" + message);
    }

}

7.启动服务,将会根据配yml配置文件创建交换机和对应mq
在这里插入图片描述
在这里插入图片描述
8.通过访问/tt/test/msg发送数据或直接通过mq管理页面发送数据
在这里插入图片描述
在控制台可接收到相关数据:
在这里插入图片描述
至此正常整合接收与发送完成
9.以上整合测试完毕,既可以将代码移植如现有的开发项目中
移植后遇到的问题是,项目启动后会自动连接本地,但配置文件中并没有做相关配置,项目yml配置文件并没有配置本地mq。报错如下:

在这里插入图片描述
即项目启动完成后开始尝试去连接本地的mq,因为我的应用时在本地启动的,服务中应该时有东西触发了mq的连接请求,所以,服务就去启动mq连接了,而这个项目中我们引入了stream,应按照yml配置文件进行连接,正常启动应该不会主动的去尝试连接配置之外mq的
在这里插入图片描述
正常启动应该到此为止,但移植后却主动尝试连接本地mq了,最终经过多方排查,原因是,现有项目中引入了springbootadmin,它默认开启了对mq的健康检查,所以触发了mq的本地连接,解决办法是在admin配置文件中将mq的健康检查进行关闭即可。
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值