热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

springcloudstream3.1@StreamListener官方不建议使用了

零、前言这又是学习尚硅谷springcloud中遇到的一个坑因为之前有一个所以这里索引从2开始2、springcloudstream3.1StreamListener官方不建议

零、前言

这又是学习尚硅谷 spring cloud中遇到的一个坑 因为之前有一个 所以这里索引从2开始


2、spring cloud stream 3.1 @StreamListener 官方不建议使用了

在使用stream 整合rabbitMQ的时候 突然发现新版本不建议使用@Binding(Source.class)@StreamListener(Sink.class)

查看了 [官方文档][https://docs.spring.io/spring-cloud-stream/docs/3.1.0/reference/html/spring-cloud-stream.html#spring_cloud_function],和一些网站 摸索了一会发现了这个新的写法,使用java.util.function.[Supplier/Function/Consumer]的方式

下面通过代码来细说:有些需要注意的地方在代码下方单独提出来了

这里的前提需要大家先把rabbitMQ安装好 这里就不赘述怎么安装的了


2.1、首先是消息提供者8801

pom.xml


com.sxt.sc2021org.example1.0-SNAPSHOT4.0.0cloud-stram-rabbitmq-consumer8802
org.springframework.cloudspring-cloud-starter-stream-rabbit
org.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-actuatororg.springframework.cloudspring-cloud-starter-netflix-eureka-clientorg.springframework.bootspring-boot-devtoolsruntimetrue
org.projectlomboklombok1.18.18providedtrueorg.springframework.bootspring-boot-starter-testtest
org.examplecloud-api-commons${project.version}compile

yaml

server:port: 8801
spring:application:name: cloud-stream-privider #端口和微服务名称 老两样#中间cloud部分和8802一样cloud:stream:binders: #自此处配置要绑定的rabbitmq的服务信息defaultRabbit: #表示定义的名称,用于binding整合type: rabbit #消息组件类型environment: # 设置rabbitmq的相关的环境配置 stream3.1只需要配置这些即可spring:rabbitmq:host: localhostport: 5672 #mq调用的端口为5672username: guestpassword: guesteureka:client:service-url:defaultZone: http://localhost:7001/eureka/instance:lease-expiration-duration-in-seconds: 5 #如果现在超过了5秒的间隔lease-renewal-interval-in-seconds: 2 #设置心跳的时间间隔instance-id: send-8801.comprefer-ip-address: true #访问的路径变为IP地址

service

package com.peach.springcloud.service;import java.util.function.Supplier;public interface IMessage {void sendMethod();
}

serviceImpl

package com.peach.springcloud.impl;import com.peach.springcloud.service.IMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.stream.function.StreamBridge;
import org.springframework.stereotype.Component;import java.util.UUID;@Component
public class MessageProviderImpl implements IMessage {//这里直接装配一个桥 用来连接rabbit或者kafka&#64;AutowiredStreamBridge streamBridge;&#64;Overridepublic void sendMethod() {String message &#61; UUID.randomUUID().toString();//这里说明一下这个 streamBridge.send 方法的参数 第一个参数是exchange或者topic 就是主题名称//默认的主题名称是通过//输入: <方法名> &#43; -in- &#43; //输出: <方法名> &#43; -out- &#43; //这里我们接收的时候就要用send方法 参数是consumer接收 详情看8802的controller//consumer的参数类型是这里message的类型streamBridge.send("send-in-0", message);System.out.println("************发送了message&#xff1a;"&#43;message);}
}

controller

package com.peach.springcloud.controller;import com.peach.springcloud.impl.MessageProviderImpl;
import com.peach.springcloud.service.IMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.stream.annotation.StreamListener;
import org.springframework.cloud.stream.function.StreamBridge;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;&#64;RestController
public class SendMessageController {&#64;Resourceprivate MessageProviderImpl messageProvider;&#64;RequestMapping("/send")public void send(){messageProvider.sendMethod();}
}

2.2 然后是8802 消息消费者

pom 和上面一样

yaml 除了端口和eureka实例其他的和8801一样

server:port: 8802spring:application:name: cloud-stream-privider#中间cloud部分和8802一样cloud:stream:binders: #自此处配置要绑定的rabbitmq的服务信息defaultRabbit: #表示定义的名称&#xff0c;用于binding整合type: rabbit #消息组件类型environment: # 设置rabbitmq的相关的环境配置 stream3.1只需要配置这些即可spring:rabbitmq:host: localhostport: 5672 #mq调用的端口为5672username: guestpassword: guesteureka:client:service-url:defaultZone: http://localhost:7001/eureka/instance:lease-expiration-duration-in-seconds: 5 #如果现在超过了5秒的间隔lease-renewal-interval-in-seconds: 2 #设置心跳的时间间隔instance-id: send-8802.comprefer-ip-address: true #访问的路径变为IP地址

controller

package com.peach.springcloud.controller;import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;import java.util.function.Consumer;&#64;Component
public class ReceiveMessageController {&#64;Value("${server.port}")private String serverPort;&#64;Bean//这里接收rabbitmq的条件是参数为Consumer 并且 方法名和supplier方法名相同//这里的返回值是一个匿名函数 返回类型是consumer 类型和提供者的类型一致//supplier发送的exchange是 send-in-0 这里只需要用send方法名即可Consumer send() {return str -> {System.out.println("我是消费者"&#43;serverPort&#43;"&#xff0c;我收到了消息&#xff1a;"&#43;str);};}}

先启动注册中心和8801 8802 之后访问我们的15672 也就是rabbitMQ的管理页面看看有没有这个exchange

展示效果&#xff1a;

看来是没问题的 名字和我们想的一样

在这里插入图片描述

绑定信息也有了

在这里插入图片描述

然后我们访问supplier的send方法发几个消息先&#xff0c;之后看8801控制台

在这里插入图片描述

8802控制台

在这里插入图片描述

之后看管理页面

在这里插入图片描述

也可以看到峰值的变动


2.3总结一下

1、在stream3.1中 我们不需要像以前一样用&#64;Binding &#64;StreamListener来监听了 这样少写了很多代码和配置 我们可以使用StreamBrige来进行发送

2、StreamBrige.send() 方法的参数拼写规则&#xff1a;

可以直接看官方文档[命名规则][https://docs.spring.io/spring-cloud-stream/docs/3.1.0/reference/html/spring-cloud-stream.html#_binding_and_binding_names]

//输入: <方法名> &#43; -in- &#43; //输出: <方法名> &#43; -out- &#43;

3、接收的时候直接用前面的方法名即可

4、看官方文档还是有些用的&#xff0c;虽然有时候看不懂但是是成为大佬的必经之路


推荐阅读
  • 深入解析Tomcat:开发者的实用指南
    深入解析Tomcat:开发者的实用指南 ... [详细]
  • HBase在金融大数据迁移中的应用与挑战
    随着最后一台设备的下线,标志着超过10PB的HBase数据迁移项目顺利完成。目前,新的集群已在新机房稳定运行超过两个月,监控数据显示,新集群的查询响应时间显著降低,系统稳定性大幅提升。此外,数据消费的波动也变得更加平滑,整体性能得到了显著优化。 ... [详细]
  • 深入解析Gradle中的Project核心组件
    在Gradle构建系统中,`Project` 是一个核心组件,扮演着至关重要的角色。通过使用 `./gradlew projects` 命令,可以清晰地列出当前项目结构中包含的所有子项目,这有助于开发者更好地理解和管理复杂的多模块项目。此外,`Project` 对象还提供了丰富的配置选项和生命周期管理功能,使得构建过程更加灵活高效。 ... [详细]
  • 如何在Java中高效构建WebService
    本文介绍了如何利用XFire框架在Java中高效构建WebService。XFire是一个轻量级、高性能的Java SOAP框架,能够简化WebService的开发流程。通过结合MyEclipse集成开发环境,开发者可以更便捷地进行项目配置和代码编写,从而提高开发效率。此外,文章还详细探讨了XFire的关键特性和最佳实践,为读者提供了实用的参考。 ... [详细]
  • 为了优化直播应用底部聊天框的弹出机制,确保在不同设备上的布局稳定性和兼容性,特别是在配备虚拟按键的设备上,我们对用户交互流程进行了调整。首次打开应用时,需先点击首个输入框以准确获取键盘高度,避免直接点击第二个输入框导致的整体布局挤压问题。此优化通过调整 `activity_main.xml` 布局文件实现,确保了更好的用户体验和界面适配。 ... [详细]
  • 如何利用Apache与Nginx高效实现动静态内容分离
    如何利用Apache与Nginx高效实现动静态内容分离 ... [详细]
  • 本文详细解析了JSONP(JSON with Padding)的跨域机制及其工作原理。JSONP是一种通过动态创建``标签来实现跨域请求的技术,其核心在于利用了浏览器对``标签的宽松同源策略。文章不仅介绍了JSONP的产生背景,还深入探讨了其具体实现过程,包括如何构造请求、服务器端如何响应以及客户端如何处理返回的数据。此外,还分析了JSONP的优势和局限性,帮助读者全面理解这一技术在现代Web开发中的应用。 ... [详细]
  • 通过整合JavaFX与Swing,我们成功地将现有的Swing应用程序组件进行了现代化改造。此次升级不仅提升了用户界面的美观性和交互性,还确保了与原有Swing应用程序的无缝集成,为开发高质量的Java桌面应用提供了坚实的基础。 ... [详细]
  • 解决基于XML配置的MyBatis在Spring整合中出现“无效绑定语句(未找到):com.music.dao.MusicDao.findAll”问题的方法
    在将Spring与MyBatis进行整合时,作者遇到了“无效绑定语句(未找到):com.music.dao.MusicDao.findAll”的问题。该问题主要出现在使用XML文件配置DAO层的情况下,而注解方式配置则未出现类似问题。作者详细分析了两个配置文件之间的差异,并最终找到了解决方案。本文将详细介绍问题的原因及解决方法,帮助读者避免类似问题的发生。 ... [详细]
  • 本文深入解析了 Apache 配置文件 `httpd.conf` 和 `.htaccess` 的优化方法,探讨了如何通过合理配置提升服务器性能和安全性。文章详细介绍了这两个文件的关键参数及其作用,并提供了实际应用中的最佳实践,帮助读者更好地理解和运用 Apache 配置。 ... [详细]
  • 在《PHP应用性能优化实战指南:从理论到实践的全面解析》一文中,作者分享了一次实际的PHP应用优化经验。文章回顾了先前进行的一次优化项目,指出即使系统运行时间较长后出现的各种问题和性能瓶颈,通过采用一些通用的优化策略仍然能够有效解决。文中不仅详细阐述了优化的具体步骤和方法,还结合实例分析了优化前后的性能对比,为读者提供了宝贵的参考和借鉴。 ... [详细]
  • C#编程指南:实现列表与WPF数据网格的高效绑定方法 ... [详细]
  • 本文探讨了在Lumen框架中实现自定义表单验证功能的方法与挑战。Lumen的表单验证机制默认返回无状态的JSON格式API响应,这给初学者带来了一定的难度。通过深入研究Validate类,作者分享了如何有效配置和使用自定义验证规则,以提升表单数据的准确性和安全性。 ... [详细]
  • 在处理大规模并发请求时,传统的多线程或多进程模型往往无法有效解决性能瓶颈问题。尽管它们在处理小规模任务时能提升效率,但在高并发场景下,系统资源的过度消耗和上下文切换的开销会显著降低整体性能。相比之下,Python 的 `asyncio` 模块通过协程提供了一种轻量级且高效的并发解决方案。本文将深入解析 `asyncio` 模块的原理及其在实际应用中的优化技巧,帮助开发者更好地利用协程技术提升程序性能。 ... [详细]
  • 如何构建基于Spring MVC框架的Java Web应用项目
    在构建基于Spring MVC框架的Java Web应用项目时,首先应创建一个新的动态Web项目。接着,需将必要的JAR包导入至WebContent/WEB-INF/lib目录下,确保包括Spring核心库及相关依赖。如遇缺失的JAR包,可向社区求助或通过Maven等工具自动下载。正确配置后,即可开始搭建应用结构与功能模块。 ... [详细]
author-avatar
尹子
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有