Springcloud整合stream,rabbitmq实现消息驱动功能

作者:灰太狼_cxh 时间:2023-07-16 10:46:08 

springcloud整合stream,rabbitmq实现消息驱动功能

1.代码实现:

创建项目stream

添加依赖

<parent>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-parent</artifactId>
       <version>2.6.2</version>
       <relativePath/> <!-- lookup parent from repository -->
   </parent>
   <groupId>com.cxh</groupId>
   <artifactId>stream</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <name>stream</name>
   <description>Demo project for Spring Boot</description>
   <properties>
       <java.version>8</java.version>
       <spring-cloud-alibaba-dependencies.version>2021.1</spring-cloud-alibaba-dependencies.version>
       <spring-cloud-dependencies.version>2021.0.0</spring-cloud-dependencies.version>
   </properties>

<dependencyManagement>
       <dependencies>
           <dependency>
               <groupId>org.springframework.cloud</groupId>
               <artifactId>spring-cloud-dependencies</artifactId>
               <version>${spring-cloud-dependencies.version}</version>
               <type>pom</type>
               <scope>import</scope>
           </dependency>
           <dependency>
               <groupId>com.alibaba.cloud</groupId>
               <artifactId>spring-cloud-alibaba-dependencies</artifactId>
               <version>${spring-cloud-alibaba-dependencies.version}</version>
               <type>pom</type>
               <scope>import</scope>
           </dependency>
       </dependencies>
   </dependencyManagement>
   <dependencies>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter</artifactId>
       </dependency>

<dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-test</artifactId>
           <scope>test</scope>
       </dependency>

<dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-web</artifactId>
       </dependency>

<dependency>
           <groupId>org.springframework.cloud</groupId>
           <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
       </dependency>
   </dependencies>

监听类

@EnableBinding(Sink.class)
public class SinkReceiver {

private static Logger logger = LoggerFactory.getLogger(SinkReceiver.class);

@StreamListener(Sink.INPUT)
   public void receive(String payload) {
       logger.info("Received: " + payload);
   }

}

2.实现效果:

启动rabbitmq, 项目stream

打开浏览器http://localhost:15672/,使用账号密码guest登录rabbitmq, 在队列中发现消息:

测试send

Springcloud整合stream,rabbitmq实现消息驱动功能

查看控制台消息:

com.cxh.stream.SinkReceiver              : Received: 测试send

补充

Spring Cloud Stream专门用于事件驱动的微服务系统,使用消息中间件来收发信息。使用Spring Cloud Stream可专注于业务开发,而不用花太多心思在应用与MQ之间的交互上。而且,在切换MQ后,也无须做太多的代码改动。

所以Spring Cloud Stream和RabbitMQ还可以整合实现消息的收发

Springcloud整合stream,rabbitmq实现消息驱动功能

整合过程

添加依赖

<dependency>
 <groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-stream-binder-rabbit</artifactId>
</dependency>

不同的MQ使用不同的依赖,非常容易切换。

定义处理收发的方法

队列无非就是收和发,所以我们要先定义好,怎么样发,怎么样收。

发送消息:

@Bean
public Supplier<String> pkslowSource() {
 return () -> {
   String message = "www.pkslow.com";
   log.info("Sending value: " + message);
   return message;
 };
}

只发送一个String,一般业务通常为Entity类。这里发送的内容也固定不变,实际业务可以通过查数据库,读文件等方式获取数据源。

接收消息:

@Bean
public Consumer<String> pkslowSink() {
 return message -> {
   log.info("Received message " + message);
 };
}

直接打印消息即可,项目中的逻辑可按具体业务实现。

配置属性

配置RabbitMQ:

spring:
  rabbitmq:
    host: localhost
    port: 5672
    username: pkslow
    password: 123456

配置Spring Cloud Stream的相关项:

spring:
  cloud:
    stream:
      function:
        definition: pkslowSource;pkslowSink
      bindings:
        pkslowSource-out-0:
         destination: pkslow-topic
        pkslowSink-in-0:
          destination: pkslow-topic
      poller:
        fixed-delay: 500

spring.cloud.stream.function.definition会定义处理方法,如本文的收发消息的方法;

bindings配置对应的function;destination指向MQ的主题;

这里配了一个poller,每隔500ms就会发送一次消息。

运行

先启动个RabbitMQ:

docker run \
-e RABBITMQ_DEFAULT_USER=pkslow \
-e RABBITMQ_DEFAULT_PASS=123456 \
-p 5672:5672 -p 15672:15672 \
rabbitmq:3.8-management

运行程序后,会自己创建主题、发送信息、接收信息:

Springcloud整合stream,rabbitmq实现消息驱动功能

运行日志如下:

Springcloud整合stream,rabbitmq实现消息驱动功能

可以看到每一次发/收大概是间隔了500ms,当然不可能是精确的500ms。

来源:https://blog.csdn.net/weixin_39220472/article/details/122555475

标签:Springcloud,stream,rabbitmq,消息驱动
0
投稿

猜你喜欢

  • springboot异常处理的基本规范

    2023-11-23 15:48:19
  • java泛型中占位符T和?有什么区别

    2022-07-05 02:53:56
  • Java总结篇系列:Java泛型详解

    2023-01-25 03:42:58
  • java编程中字节流转换成字符流的实现方法

    2021-06-09 15:59:04
  • 基于java的opencv开发过程详解

    2022-03-31 20:02:59
  • Java语言实现Blowfish加密算法完整代码分享

    2023-11-02 21:30:07
  • android自定义ProgressDialog加载效果

    2021-06-04 19:29:30
  • Android中GPS坐标转换为高德地图坐标详解

    2023-10-07 20:40:24
  • 一文梳理Java 8后的新功能

    2023-07-13 07:41:43
  • Java并发编程面试之线程池

    2023-11-11 10:58:33
  • C#画笔使用复合数组绘制单个矩形的方法

    2022-03-20 01:41:09
  • Android带进度条的文件上传示例(使用AsyncTask异步任务)

    2023-06-24 09:43:11
  • Android开发中给EditText控件添加TextWatcher监听实现对输入字数的限制(推荐)

    2023-01-19 23:52:35
  • Unity3D实现批量下载图片功能

    2021-07-03 13:00:14
  • WPF实现魔方小游戏

    2022-09-06 01:53:18
  • Java中定时器Timer致命缺点案例详解

    2022-08-27 08:38:45
  • 关于synchronized有趣的同步问题

    2021-11-03 05:46:55
  • 对Java的面对对象编程中对象和引用以及内部类的理解

    2022-02-22 12:11:15
  • C#解析json字符串总是多出双引号的原因分析及解决办法

    2022-10-22 02:40:46
  • c# Thread类的用法详解

    2023-02-08 06:53:28
  • asp之家 软件编程 m.aspxhome.com