SpringBoot整合RabbitMQ实现发布订阅

RabbitMQ是一个开源的消息代理和队列服务器,用于通过轻量级消息传递协议(AMQP)在分布式系统中传递消息。在RabbitMQ中,主要有以下角色:

  1. 生产者(Producer):负责发送消息的应用程序。生产者将消息发布到RabbitMQ中的交换器(Exchange)。
  2. 消费者(Consumer):负责接收消息的应用程序。消费者订阅队列(Queue)中的消息,当有新消息到达时,RabbitMQ会将消息发送给消费者。
  3. 交换器(Exchange):负责接收生产者发送的消息,并根据路由键(Routing
    Key)将消息路由到相应的队列。RabbitMQ支持多种类型的交换器,如直接交换器、主题交换器、扇形交换器和头交换器。
  4. 队列(Queue):存储消息的缓冲区。队列中的消息会被消费者接收并处理。一个队列可以有多个消费者同时监听。
  5. 绑定(Binding):用于将交换器和队列关联起来。绑定时需要指定一个路由键,生产者发送消息时也需要指定一个路由键,当两者匹配时,消息会被发送到相应的队列。
  6. 路由键(Routing
    Key):用于确定消息应该发送到哪个队列。生产者发送消息时需要指定一个路由键,交换器根据路由键将消息路由到相应的队列。
  7. 连接(Connection):客户端与RabbitMQ服务器之间的TCP连接。
  8. 信道(Channel):在连接上创建的逻辑通道,用于发送和接收消息。一个连接可以包含多个信道,每个信道代表一个会话任务。
  9. 消息确认(ACK):消费者收到消息后,向RabbitMQ发送确认信息,表示消息已被成功处理。如果未收到确认,RabbitMQ会将消息重新发送给消费者。
  10. 死信队列(Dead Letter
    Queue):用于存储无法被正常消费的消息。当消息无法被正常消费时,RabbitMQ会将其转移到死信队列,以便后续处理。

以下是SpringBoot整合RabbitMQ实现发布订阅示例代码:

1. 添加依赖

在项目的pom.xml文件中添加Spring Boot和RabbitMQ的依赖:

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

2. 配置RabbitMQ

在application.properties文件中配置RabbitMQ的相关信息,例如服务器地址、端口、用户名和密码等:

spring.rabbitmq.host=你的RabbitMQ服务器地址
spring.rabbitmq.port=5672
spring.rabbitmq.username=用户名
spring.rabbitmq.password=密码

3. 创建消息发送者

创建一个类,用于发送消息到RabbitMQ队列。在这个类中,我们需要注入一个AmqpTemplate对象,然后使用它的convertAndSend方法发送消息。

import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;@Component
public class MessageSender {@Autowiredprivate AmqpTemplate amqpTemplate;public void sendMessage(String exchange, String routingKey, Object message) {amqpTemplate.convertAndSend(exchange, routingKey, message);}
}

4. 创建消息接收者

创建一个类,用于从RabbitMQ队列接收消息。在这个类中,我们需要注入一个AmqpTemplate对象,并使用它的@RabbitListener注解来监听队列中的消息。当有新的消息到达时,这个方法会被自动调用。

import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;@Component
public class MessageReceiver {@RabbitListener(queues = "你的消息队列名称")public void handleMessage(Object message) {System.out.println("接收到消息: " + message);}
}

5. 测试发布订阅模式

在你的应用程序中,使用MessageSender类的sendMessage方法发送消息,然后在另一个实例中使用MessageReceiver类的handleMessage方法接收消息。这样,你就可以实现发布订阅模式了。

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

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

相关文章

MySQL数据的增删改查

小练习 1. 在数据库 exercise 中创建课程表 stu_course &#xff0c;包含字段课程编号 (number) &#xff0c;类型为整数&#xff0c;长度为 11 &#xff0c;是主键&#xff0c;自增长&#xff0c;非空、课程名称 (name) &#xff0c;类型为字符串&#xff0c;长度为 20 &…

The Rise and Potential of Large Language Model Based Agents: A Survey 导读

这篇论文探讨了基于大型语言模型(LLM)的智能代理的发展和潜力。传统的AI算法或训练策略只能提高特定任务的表现,而LLM作为通用且强大的模型,可以为设计适应不同场景的智能代理提供基础。作者提出了一个包含“大脑”、“感知”和“行动”的通用框架,并将其应用于单个代理、…

oracle视图、存储过程、定时任务、用户授权、备份表

视图 create or replace view user_view as select user_id,dept_id,phonenumber,name,user_name from sys_user where del_flag0 and status0 and sfyzhY;存储过程 create or replace procedure sg_zzjg ascursor region_list isselect ID_,CODE_,CREATE_TIME,CREATE_USER_I…

macos Android平台签名证书(.keystore)

一、申请appid的使用说明&#xff08;有appid的请忽略申请apid&#xff09; 创建应用 申请的appid在源码视图填写后会自动生成一个对应的包名 ⚠️注意&#xff1a;申请appid的时候应用名称和项目名称保持一致。 二、 Android如何使用自用证书进行打包 1.找到安装jdk的路径 …

【深度学习】【AutoDL】【SSH】通过VSCode和SSH使用AutoDL服务器训练模型

身边没有显卡资源或不足以训练模型时&#xff0c;可以租赁服务器的显卡。 1、注册AutoDL并配置环境 首先打开AutoDL官网&#xff0c;注册账号并租赁自己期望的显卡资源 点击“租赁”之后&#xff0c;我们要继续选择基础环境。此处&#xff0c;我们让其自动配置好基础的pytor…

【速存】深入理解Django ORM:编写高效的数据库查询

Django作为一个高级Python Web框架&#xff0c;其自带的对象关系映射&#xff08;ORM&#xff09;是其最强大的特性之一。ORM允许开发者以编程语言原生的方式操作数据库&#xff0c;而无需编写原始的SQL查询。本文展示如何在Django项目中利用ORM执行各种数据库查询&#xff0c;…

.NET中的matplotlib平替,ScottPlot简单使用

文章目录 前言解决方案Python调用.NET 原生解决 ScottPlot找到文章ScottPlot Nuget安装简单代码测试代码跑不了5.0新版本测试 总结 前言 我之前在学OpenCV 三语言开发的时候&#xff0c;遇到了一个问题&#xff0c;怎么可视化的显示数据。Python有matplotlib&#xff0c;那么C…

Tomcat的安装及配置教程

文章目录 一、Tomcat二、安装流程三、常见问题四、相关文章 一、Tomcat Tomcat是一个开源的Java Servlet容器&#xff0c;它实现了Java Servlet和JavaServer Pages&#xff08;JSP&#xff09;规范&#xff0c;并为Java Web应用程序提供Web服务器环境。以下是Tomcat的一些详细…

量化交易学习2(因子研究)

因子有效性检验 参考1 参考2 在多因子研究框架中&#xff0c;因子的有效性检验是不可避免的工作&#xff0c;其本质是衡量一个因子的选股能力。 目前学术界和业界普遍使用的两种方法&#xff1a; 相关性检验 因子的相关性检验即检验单因子和收益率之间是否存在相关性 IC值 计…

20240126请问在ubuntu20.04.6下让GTX1080显卡让whisper工作在large模式下?

20240126请问在ubuntu20.04.6下让GTX1080显卡让whisper工作在large模式下&#xff1f; 2024/1/26 21:19 问GTX1080模式使用large该如何配置呢&#xff1f; 这个问题没有完成&#xff0c;可能需要使用使用显存更大的显卡了&#xff01; 比如GTX1080Ti 11GB&#xff0c;更猛的可…

C++(Qt)软件调试---静态分析工具clang-tidy(18)

C(Qt)软件调试—静态分析工具clang-tidy&#xff08;18&#xff09; 文章目录 C(Qt)软件调试---静态分析工具clang-tidy&#xff08;18&#xff09;1、概述2、clang-tidy基本用法3、目前已有检查项4、Qt Creator中安装clang-tidy5、Qt Creator中使用clang-tidy6、Clang-Tidy配置…

HTML5 服务器发送事件(Server-Sent Events)

前言&#xff1a; 文章内容参考&#xff1a; HTML5 服务器发送事件(Server-Sent Events) | 菜鸟教程 microsoft/fetch-event-source - npm event-source-polyfill - npm 正文&#xff1a; HTML5服务器发送事件&#xff08;server-sent event&#xff09;允许网页获得来自服务器…

websocket 通信协议

websocket是什么 答: 它是一种网络通信协议&#xff0c;是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。 意思就是服务器可以主动向客户端推送信息&#xff0c;客户端也可以主动向服务器发送信息 属于服务器推送技术的一种. 为什么需要websocket? 疑问?…

Windows Server Nginx 反向代理Spring Boot配置无效 404 未找到

一个Spring Boot的系统&#xff0c;开发完成发布到Windows服务器里&#xff0c;使用nginx作为反向代理&#xff0c;修改刷新配置文件&#xff0c;nginx.conf&#xff0c;总是报错404。 这个是不生效刷新配置文件的bat脚本&#xff1a; REM 切换到NGINX安装目录 cd D:\nginx-1.…

修复WordPress内部服务器错误的步骤及解决方案

WordPress是一款广泛使用的开源内容管理系统&#xff0c;但在使用过程中&#xff0c;可能会遇到各种内部服务器错误。这些错误可能由于多种原因引起&#xff0c;例如插件冲突、文件权限问题、服务器配置不当等。为了帮助您快速解决这些问题&#xff0c;本文将为您提供一套详细的…

数据结构排序算详解(动态图+代码描述)

目录 1、直接插入排序&#xff08;升序&#xff09; 2、希尔排序&#xff08;升序&#xff09; 3、选择排序&#xff08;升序&#xff09; 方式一&#xff08;一个指针&#xff09; 方式二&#xff08;两个指针&#xff09; 4、堆排序&#xff08;升序&#xff09; 5、冒…

Golang协程池ants使用笔记

最近工程中遇到goroutine滥用导致的bug&#xff0c;采用了ants协程池来解决。 github-ants官方源码和使用说明。 记录一个例子 package mainimport ("fmt""runtime""github.com/panjf2000/ants/v2" )// 模拟一个任务&#xff1a;求数字x的平方 …

代码随想录算法训练营数组总结

一、理论基础 定义&#xff1a;数组是存放在连续内存空间上的相同类型数据的集合。 注意事项&#xff1a; ①数组下标从0开始。 ②数组元素不能删除&#xff0c;只能覆盖。 ③二维数组的地址空间不一定是连续的。 二、方法总结 1.二分法 思想&#xff1a;设置left、right指针&a…

equence to Sequence Learning with Neural Networks 导读

本文介绍了一种基于深度神经网络&#xff08;DNN&#xff09;的序列到序列学习方法&#xff0c;该方法使用多层长短时记忆网络&#xff08;LSTM&#xff09;将输入序列映射为固定维度向量&#xff0c;并使用另一个深LSTM解码目标序列。在英语到法语翻译任务上&#xff0c;该方法…

QtRVSim(二)一个 RISC-V 程序的解码流程

继上一篇文章简单代码分析后&#xff0c;本文主要调研如何实现对指令的解析运行。 调试配置 使用 gdb 工具跟踪调试运行。 c_cpp_properties.json 项目配置&#xff1a; {"name": "QtRvSim","includePath": ["${workspaceFolder}/**&quo…