SpringCloud——消息驱动Stream

news2024/11/24 15:42:35

屏蔽底层消息中间件MQ的差异,降低切换成本,统一消息的编程模型。
在这里插入图片描述

在这里插入图片描述

生产者

一、依赖

spring-cloud-starter-stream-rabbit (rabbitMQ中间件)

二、配置文件

server:
	port: 8801

spring:
	application:
		name: cloud-stream-provider
	cloud:
		stream:
			binders: #配置要绑定的rabbitmq的服务信息
				defatuleRabbit: 
					type: rabbit #消息组件类型
					environment:
						spring:
							rabbitmq:
								host: localhost
								port: 5672
								username: guest
								password: guest
			bindings:
				output:
					destination: studyExchange # 要使用exchange名称定义
					content-type: application/json # 设置消息类型,文本设置为text/plain
					binder: defaultRabbit #要绑定的消息服务具体设置

eureka:
	client:
		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-8001.com # 在信息列表时显示主机名称
		prefer-ip-address: true #访问的路径变为ip地址

三、启动类

@SpringBootApplication
public class StreamMQMain8801{
	public static void main(String[] args){
		SpringApplication.run(StreamMQMain8801.class,args);
	}
}

四、业务类(发送消息接口、发送消息接口实现类)

public interface IMessageProvider{
	public String send();
}
@EnableBinding(Source.class) //消息推送管道
public class MessageProvierImpl 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;
	}
}

五、Controller控制类

@RestController
public class SendMessageController{

	@Resource
	private IMessageProvider messageProvider;

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

六、测试

启动eureka,启动rabbitmq,启动消息生产者
访问:http://localhost:8801/sendMessage

消费者

一、依赖

spring-cloud-starter-stream-rabbit

二、配置文件

server:
	port: 8802

spring:
	application:
		name: cloud-stream-consumer
	cloud:
		stream:
			binders:
		defaultRabbit:
			type: rabbit
			environment:
				spring:
					rabbitmq:
						host: localhost
						port:5672
						username: guest
						password: guest
				bindings:
			input:
				destination: studyExchange
				content-type: application/json
					binder: defaultRabbit
eureka:
	client:
	service-url:
		defaultZont: http://localhost:7001/eureka
	instance:
		lease-renewal-interval-in-seconds: 2
	lease-expiration-duration-in-seconds: 5
	instance-id: receive-8802.com
	prefer-ip-address: true

三、启动类

@SpringBootApplication
public class StreamMQMain8802{
	public static void main(String[] args){
		SpringApplication.run(StreamMQMain8802.class,args);
	}
}

四、接收消息

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

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

克隆一个消费者工程,运行产生的两个问题

  • 有重复消费问题,即两个消费者工程同时收到了生产工程的消息(不同组可以重复消费,但同一组内发生竞争关系,只有一个可以消费)
  • 消息持久化问题

一、配置文件更改(添加一个组的标记)

两个消费者工程分别配置(自定义配置分组,默认情况是不同的分组)
在这里插入图片描述
在这里插入图片描述

若避免重复消费,将配置文件的group配置成相同的名称

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/754358.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从C语言到C++_26(set+map+multiset+multimap)力扣692+349+牛客_单词识别

目录 1. 关联式容器 1.1 树形结构的关联式容器 2. set的相关介绍 2.1 set的构造和迭代器 2.2 set的容量和操作函数 2.3 set使用代码 2.4 multiset使用 3. map的相关介绍 3.1 键值对 3.2 map的构造和迭代器 3.3 map的容量和操作函数 3.4 map使用代码 3.5 multimap使…

ai绘画软件免费下载哪个好用?探索ai绘画生成器

曾经有一个年轻的艺术爱好者&#xff0c;名叫小明。他对绘画充满热情&#xff0c;渴望能够通过绘画表达自己的创造力和想法。然而&#xff0c;他并没有接受过正规的美术训练&#xff0c;也没有负担得起的昂贵绘画软件。因此&#xff0c;他开始思考ai绘画软件免费下载哪个好用&a…

SpringCloud——消息总线Bus

SpringCloud Bus将分布式系统的节点与轻量级消息系统链接起来的框架&#xff0c;是对SpringCloud Config的加强&#xff0c;广播自动版的配置。 支持两种消息代理&#xff1a;RabbitMQ和Kafka 一、创建工程&#xff0c;添加依赖 spring-cloud-starter-config spring-cloud-st…

【DeepSpeed 教程】四,DeepSpeed ZeRO++博客和代码解析

0x0. 系列文章 DeepSpeed-Chat 打造类ChatGPT全流程 笔记二之监督指令微调DeepSpeed-Chat 打造类ChatGPT全流程 笔记一【DeepSpeed 教程翻译】三&#xff0c;在 DeepSpeed中使用 PyTorch Profiler和Flops ProfilerDeepSpeed结合Megatron-LM训练GPT2模型笔记&#xff08;上&…

程序员如何制作PPT?

有道无术&#xff0c;术尚可求也&#xff1b;有术无道&#xff0c;止于术。大家好&#xff0c;我是程序员雪球&#xff0c;今天让我们一起探讨如何从零开始制作高质量的 PPT。 上周&#xff0c;领导要求我撰写一份关于 4到6月持续集成运营分析的报告&#xff0c;并通过 PPT 的形…

【Python爬虫与数据分析】爬虫常用标准库(时间、随机数)

目录 一、模块化概述 二、time库 1. 时间获取 2. 时间格式化 3. 程序计时 三、datetime库 1. datetime.datetime类 2. datetime.timedelta类 四、random库 1. 基本随机函数 2. 扩展随机函数 3. 随机时间的生成 一、模块化概述 Python程序由模块组成&#xff0c;一个…

Redis数据结构 — SkipList

目录 跳表结构设计 跳表节点结构设计 跳表节点查询过程 跳表节点层数设置 为什么用跳表不用红黑树&#xff1f; 跳表平均指针数目为1/(1-p)公式推导 跳表的优势是能支持平均 O(logN) 复杂度的节点查找&#xff0c;支持进行高效的范围查询 SkipList&#xff08;跳表&…

idea-控制台输出乱码问题

idea-控制台输出乱码问题 现象描述&#xff1a; 今天在进行IDEA开发WEB工程调式的时候控制台日志输出了乱码&#xff0c;如下截图 其实开发者大多都知道乱码是 编码不一致导致的&#xff0c;但是有时候就是不知到哪些地方不一致&#xff0c;今天我碰到的情况可能和你的不相同…

【C++】多态及原理

文章目录 1.多态的概念2.多态的定义及实现2.1多态的构成条件2.2虚函数的重写2.3析构函数的重写2.4 C11 override和 final2.5重载、重写(覆盖)、重定义(隐藏)的对比 3.抽象类3.1定义 4.多态的原理4.1虚函数表 虚表单继承的虚表多继承的虚表问答题 1.多态的概念 多态&#xff0c;…

(数组与矩阵) 剑指 Offer 03. 数组中重复的数字 ——【Leetcode每日一题】

❓ 剑指 Offer 03. 数组中重复的数字 难度&#xff1a;简单 找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0&#xff5e;n-1 的范围内。数组中某些数字是重复的&#xff0c;但不知道有几个数字重复了&#xff0c;也不知道每个数字重复了几次。请找出…

新功能: 全新的UI视图、搜索设置和强大的API特性

我们在ftrack Studio中引入的一些超赞的新功能&#xff0c;旨在将用户体验提升到一个新的水平&#xff01;准备好提高生产效率、优化任务流程&#xff0c;并获得有价值的见解&#xff0c;以便为你的所有项目做出数据驱动的决策。 本月&#xff0c;我们为ftrack Studio带来了几个…

PyLab绘制曲线图

PyLab 是一个面向 Matplotlib 的绘图库接口&#xff0c;其语法和 MATLAB 十分相近。它和 Pyplot 模快都够实现 Matplotlib 的绘图功能。PyLab 是一个单独的模块&#xff0c;随 Matplotlib 软件包一起安装&#xff0c;该模块的导包方式和 Pyplot 不同&#xff0c;如下所示&#…

SAP CAP篇十:理解Fiori UI的Annoation定义

本文目录 本系列此前的文章官方文档和基础概念SAP CAP对Fiori UI的支持package.json的新增内容Annotation定义List Page 生成的Edmx文件 对应代码及branch 本系列此前的文章 SAP CAP篇一: 快速创建一个Service&#xff0c;基于Java的实现 SAP CAP篇二&#xff1a;为Service加上…

青岛大学_王卓老师【数据结构与算法】Week05_12_队列的类型定义_学习笔记

本文是个人学习笔记&#xff0c;素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享&#xff0c; 另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权&#xff0c;请留言作删文处理。 课程视频链接&#xff1a; 数据结构与算法基础…

【学习笔记】[CTSC2017] 网络

我的评价是毒瘤&#x1f605; 首先想到的肯定是原树上的直径。 于是得到第一个结论&#xff1a;这条边的两个端点一定在直径上。 第二个结论&#xff1a;每个点距离最远的那个点是直径的两个端点之一。 发现直径上形成了一个环。显然这个环的长度应该 ≥ L \ge L ≥L&#…

Mysql分区表----分类、优势、特点、优点

范围分区&#xff08;Range Partitioning、哈希分区&#xff08;Hash Partitioning&#xff09;列 表分区&#xff08;List Partitioning&#xff09;、键值分区&#xff08; Key partition &#xff09; 文章目录 mysql分区表概述&#xff1a;MYSQL分区表简单而言就是将一张大…

跨域问题解决

由于同源策略&#xff0c;需要协议&#xff0c;域名&#xff0c;端口三个都相同才能进行访问&#xff0c;是一种浏览器的保护策略 CORS:Cross Origin Resource Sharing SpringBoot 项目中解决跨域 1.在目标方法中加入CrossOrigin注解 2.添加一种过滤器 分别是允许哪些域&#…

分享几种在家就能做的网赚方式,下班暑假都可以做的副业推荐

在当前的互联网时代中&#xff0c;网上赚钱已经成为受到广泛关注的一个话题。越来越多的人渴望通过利用互联网来实现经济上的自由&#xff0c;然而&#xff0c;同时也面临一些风险和挑战。 尽管网上有很多兼职赚钱的机会&#xff0c;但并不是所有方式都可信赖。有些机会可能会…

JVM_00000

JVM 所谓虚拟机&#xff08;Virtual Machine&#xff09;就是一台虚拟的计算机。它是一款软件&#xff0c;用来执行一系列虚拟计算机指令。大体上&#xff0c;虚拟机可以分为系统虚拟机和程序虚拟机。 Visual Box&#xff0c;VMware就属于系统虚拟机&#xff0c;它们完全是对物…

【动手学习深度学习--逐行代码解析合集】18网络中的网络(NiN)

【动手学习深度学习】逐行代码解析合集 18网络中的网络&#xff08;NiN&#xff09; 视频链接&#xff1a;动手学习深度学习–网络中的网络&#xff08;NiN&#xff09; 课程主页&#xff1a;https://courses.d2l.ai/zh-v2/ 教材&#xff1a;https://zh-v2.d2l.ai/ 1、NiN网络…