我的编程空间,编程开发者的网络收藏夹
学习永远不晚

SpringCloud Stream使用解析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

SpringCloud Stream使用解析

SpringCloudStream

官方定义Spring Cloud Stream 是一个构建消息驱动微服务的框架。
应用通过inputs和outputs来与Spring Cloud Stream中binder对象交互。通过我们配置来binding(绑定),而Spring Cloud Stream中的binder对象负责与消息中间件交互。所以,我们只需要搞清楚如何与Spring Cloud Stream 交互就可以方便使用消息驱动的方式。
通过使用Spring Integration来连接消息代理中间件以及实现消息事件驱动。
目前仅支持RabbitMQ和kafka

下面用RabbitMQ来说明使用!

案例之消息驱动之生产者

1.建一个项目,并添加如下的依赖:


 <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
    </dependency>

2.编写下面的yml文件


server:
 port: 8801

spring:
 application:
  name: cloud-stream-provider
 rabbitmq:
  host: 192.168.43.76
  port: 5672
  username: guest
  password: guest
 cloud:
  stream:
   binders: # 在此处配置要绑定的rabbitmq的服务信息;
    defaultRabbit: # 表示定义的名称,用于于binding整合
     type: rabbit # 消息组件类型
#     environment: # 设置rabbitmq的相关的环境配置,(本机方式)
#      spring:
#       rabbitmq:
#        host: localhost
#        port: 5672
#        username: guest
#        password: guest
   bindings: # 服务的整合处理
    output: # 这个名字是一个通道的名称
     destination: studyExchange # 表示要使用的Exchange名称定义
     content-type: application/json # 设置消息类型,本次为json,文本则设置“text/plain”
     binder: defaultRabbit # 设置要绑定的消息服务的具体设置(爆红不要管)

eureka:
 client: # 客户端进行Eureka注册的配置
  service-url:
   defaultZone: http://localhost:7001/eureka
 instance:
  lease-renewal-interval-in-seconds: 2 # 设置心跳的时间间隔(默认是30秒)
  lease-expiration-duration-in-seconds: 5 # 如果现在超过了5秒的间隔(默认是90秒)
  instance-id: send-8801.com # 在信息列表时显示主机名称
  prefer-ip-address: true   # 访问的路径变为IP地址

3.编写service,下面仅展示实现类:


import org.lzl.springcloud.service.IMessageProvider;
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.messaging.Source;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.support.MessageBuilder;
import javax.annotation.Resource;
import java.util.UUID;


//注意这里不需要写@Service,因为该service是跟rabbitmq打交道的
@EnableBinding(Source.class)//定义消息的推送管道
public class MessageProviderImpl implements IMessageProvider {

  @Resource
  private MessageChannel output;

  @Override
  public String send() {
    String serial = UUID.randomUUID().toString();
    output.send(MessageBuilder.withPayload(serial).build());
    System.out.println("*****serial:"+serial);
    return null;
  }
}

4.编写controller


import org.lzl.springcloud.service.IMessageProvider;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;

@RestController
public class SendMessageController {
  @Resource
  private IMessageProvider messageProvider;

  @GetMapping(value = "/sendMessage")
  public String sendMessage(){
    return messageProvider.send();
  }
}

案例之消息驱动消费者

1.写pom,加上下面的依赖


	<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

2.编写yml,和生产者唯一的区别在于,下面是input


server:
 port: 8802

spring:
 application:
  name: cloud-stream-consumer
 rabbitmq:
  host: 192.168.43.76
  port: 5672
  username: guest
  password: guest
 cloud:
  stream:
   binders: # 在此处配置要绑定的rabbitmq的服务信息;
    defaultRabbit: # 表示定义的名称,用于于binding整合
     type: rabbit # 消息组件类型
#     environment: # 设置rabbitmq的相关的环境配置
#      spring:
#       rabbitmq:
#        host: localhost
#        port: 5672
#        username: guest
#        password: guest
   bindings: # 服务的整合处理
    input: # 这个名字是一个通道的名称
     destination: studyExchange # 表示要使用的Exchange名称定义
     content-type: application/json # 设置消息类型,本次为对象json,如果是文本则设置“text/plain”
     binder: defaultRabbit # 设置要绑定的消息服务的具体设置



eureka:
 client: # 客户端进行Eureka注册的配置
  service-url:
   defaultZone: http://localhost:7001/eureka
 instance:
  lease-renewal-interval-in-seconds: 2 # 设置心跳的时间间隔(默认是30秒)
  lease-expiration-duration-in-seconds: 5 # 如果现在超过了5秒的间隔(默认是90秒)
  instance-id: receive-8802.com # 在信息列表时显示主机名称
  prefer-ip-address: true   # 访问的路径变为IP地址

3.编写controller,该controller不向外界暴露端口,起到实时监控消息管道的作用!


import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.annotation.StreamListener;
import org.springframework.cloud.stream.messaging.Sink;
import org.springframework.messaging.Message;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

@Component
@EnableBinding(Sink.class)
public class ReceiveMessageListenerController {
  @Value("${server.port}")
  private String serverPort;

  @StreamListener(Sink.INPUT)//只要8801发送消息,8802就会接收到8801的消息
  public void input(Message<String> message){
    System.out.println("消费者1号--------》接收到的消息:"+message.getPayload()+"\t port: "+serverPort);
  }

}

测试

启动rabbitMQ和上面的两个项目,访问http://localhost:8801/sendMessage
在消费者的控制台中就会出现下面的订单流水号:

在这里插入图片描述

补充说明

我们打开rabbitmq的监控界面:发现默认是帮我们分组的

在这里插入图片描述

想要自定义分组只需要在消费者的yml文件中加上下面的一行:

在这里插入图片描述

如果有多个消费者,为了避免出现重复消费的问题,应将组名设置成一样的。一个组的成员轮循消费,不同组的成员进行相同的消费。

到此这篇关于SpringCloud Stream介绍的文章就介绍到这了,更多相关SpringCloud Stream介绍内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

SpringCloud Stream使用解析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

java springcloud的Stream怎么使用

本篇内容主要讲解“java springcloud的Stream怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java springcloud的Stream怎么使用”吧!Spring C
2023-06-05

Stream怎么在SpringCloud中使用

本篇文章为大家展示了Stream怎么在SpringCloud中使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1.建一个项目,并添加如下的依赖:
2023-06-14

最新SpringCloud Stream消息驱动讲解

SpringCloudStream是一个构建消息驱动微服务的框架,通过SpringCloudStream连接消息中间件,以实现消息事件驱动,这篇文章主要介绍了SpringCloud Stream消息驱动,需要的朋友可以参考下
2022-11-13

浅析Node.js 中 Stream API 的使用

本文由浅入深给大家介绍node.js stream api,具体详情请看下文吧。 基本介绍 在 Node.js 中,读取文件的方式有两种,一种是用 fs.readFile ,另外一种是利用 fs.createReadStream 来读取。
2022-06-04

SpringCloud-Spring Boot Starter使用测试实例分析

这篇文章主要介绍了SpringCloud-Spring Boot Starter使用测试实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringCloud-Spring Boot Starter使用测
2023-07-02

Java8 Stream之groupingBy分组使用解读

这篇文章主要介绍了Java8 Stream之groupingBy分组使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-05-17

使用SpringCloud Gateway解决跨域问题

本文介绍了使用SpringCloudGateway解决跨域问题。跨域问题是一种安全机制,限制来自不同域或协议的请求。SpringCloudGateway提供了一个内置的CORS处理机制,可以轻松解决跨域请求被浏览器阻止的问题。用户可以通过启用CORS支持、配置CORS规则和将CORS处理添加到Gateway路由来配置SpringCloudGateway以支持CORS。使用SpringCloudGateway解决跨域问题具有简单易用、灵活可配置和集中管理等优点。需要注意的是,在启用CORS时要谨慎并采取适当
使用SpringCloud Gateway解决跨域问题
2024-04-02

SpringCloud中Gateway的使用教程详解

SpringCloud Gateway是Spring体系内的一个全新项目,它旨在为微服务架构提供一种简单有效的统一的API路由管理方式。本文就来为大家详细讲讲Gateway的使用教程,需要的可以参考一下
2022-11-13

nginx stream无法使用的解决办法

NginxStream无法使用时的解决步骤:检查配置,确保Stream模块已加载且服务器块配置正确。检查防火墙和SELinux设置,确保允许传入连接。查看日志和socket,查找连接问题或权限问题。解决常见问题,如连接无法建立、传输速度慢或连接重置。尝试升级Nginx、重新编译或寻求社区支持。启用调试选项以获取更详细的故障排除信息。
nginx stream无法使用的解决办法
2024-04-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录