消息队列 Rabbit Direct Exchange

news/2024/9/18 13:27:44/ 标签: 消息队列, rabbitmq

消费端:

修改服务端口:

server:port: 8991

创建监听器:

@Component
public class MessageListener {/*** 交换机名*/public static final String EXCHANGE_NAME = "exchange.direct.order";/*** 路由键*/public static final String ROUTING_KEY = "order";/*** 队列名*/public static final String QUEUE_NAME = "queue.order";/**** @param data* @param msg* @param channel*/@RabbitListener(bindings = @QueueBinding(value = @Queue(value = QUEUE_NAME, durable = "true"),exchange = @Exchange(value = EXCHANGE_NAME),key = {ROUTING_KEY}))public void processMessage(String data, Message msg, Channel channel) {System.out.println("接收到消息:" + data);}
}

上面处理消息的方法,按上述所示添加注解,当消费端运行起来后,如果RabbitMQ中没有相应的交换机和队列,会自动创建,同时会自动创建绑定关系。如果RabbitMQ中已经手动配置了交换机和队列,则可以采用如下所示的简单配置方式(只是监听):
@RabbitListener(queues={QUEUE_NAME}))

生产端:

指定端口:

server:port: 8981

创建消息生产者

@RestController
@RequestMapping("/rabbitmq")
public class RabbitMQController {/*** 交换机名*/public static final String EXCHANGE_NAME = "exchange.direct.order";/*** 路由键*/public static final String ROUTING_KEY = "order";@Resourceprivate RabbitTemplate rabbitTemplate;@GetMapping("/send")public String send() {rabbitTemplate.convertAndSend(EXCHANGE_NAME, ROUTING_KEY, "hello rabbitmq"+ System.currentTimeMillis());return "消息发送成功!!!";}
}

测试

依次启动消息端、生产端。网页中请求生产端生成消息,在消费端控制台可以看到输出的消息。

可靠性保障

故障情况1:消息没有发送到消息队列

  • 解决思路A:在生产者端进行确认,具体操作中我们会分别针对交换机和队列来确认如果没有成功发送到消息队列服务器上,那就可以尝试重新发送
  • 解决思路B:为目标交换机指定备份交换机,当目标交换机投递失败时,把消息投递至备份交换机

故障情况2:消息队列服务器宕机导致内存中消息丢失

  • 解决思路:消息持久化到硬盘上,哪怕服务器重启也不会导致消息丢失

解决思路故障情况3:消费端宕机或抛异常导致消息没有成功被消费

  • 消费端消费消息成功,给服务器返回ACK信息,然后消息队列删除该消息
  • 消费端消费消息失败,给服务器端返回NACK信息,同时把消息恢复为待消费的状态,这样就可以再次取回消息,重试一次(当然,这就需要消费端接口支持幂等性)

http://www.ppmy.cn/news/1526757.html

相关文章

20240912软考架构-------软考161-165答案解析

每日打卡题161-165答案 161、【2014年真题】 难度:一般 企业信息化一定要建立在企业战略规划基础之上,以企业战略规划为基础建立的企业管理模式是建立( ) 的依据。 A.企业战略数据模型 B.企业业务运作模型…

python 读取excel数据存储到mysql

一、安装依赖 pip install mysql-connector-python 二、mysql添加表students CREATE TABLE students (ID int(11) NOT NULL AUTO_INCREMENT,Name varchar(50) DEFAULT NULL,Sex varchar(50) DEFAULT NULL,PRIMARY KEY (ID) ) ENGINEInnoDB AUTO_INCREMENT13 DEFAULT CHARSETu…

【Oracle】调优与oracle最大连接数配置

Oracle调优与oracle最大连接数配置 oracle最大连接数是生产环境中最重要的一个调优指标 oracle 默认情况下的最大连接数是150 oracle 默认情况下的允许所有客户终端连接到oracle的最大连接个数是150,超过该改数据数据库拒绝连接接入 文章目录 Oracle调优与oracle最大…

快速使用react 全局状态管理工具--redux

redux Redux 是 JavaScript 应用中管理应用状态的工具,特别适用于复杂的、需要共享状态的中大型应用。Redux 的核心思想是将应用的所有状态存储在一个单一的、不可变的状态树(state tree)中,状态只能通过触发特定的 action 来更新…

数据在内存中的存储方式

前言:已经好久没更新了,开学之后学习编程的时间少了很多。因此,已经好几个礼拜都没有写文章了。 在讲解操作符的时候,我们就已经学习过了整数在内存中的存储方式。若有不懂的伙伴可以前往操作符详解进行学习。今天我们主要来学习…

java.人机猜拳游戏

人机猜拳,这里我们定义输入0是剪刀,1是石头,2是布。电脑的数字为随机产生,可以用Random。 采用三局制。三局中每一小局中都有输出显示小局的获胜方三局比赛结束后,若电脑获胜次数等于玩家,则输出&#xff1…

使用ENVI之辐射定标

将下载好的遥感影像导入遥感影像处理软件ENVI 5.6中 使用ENVI 5.6的Toolbox中的Radiometric Calibration工具 跳出的Date Input File界面中选中要进行辐射定标的文件选中 再在跳出的Radiometric Calibration界面中将Output Interleave改为BIL再点击Apply FLAASH Settings Soale…

PostgreSQL的表压缩

PostgreSQL的表压缩 PostgreSQL提供了在表或列级别进行数据压缩的功能,以帮助减少存储空间和提高I/O性能。具体来说,PostgreSQL 14及以后的版本引入了对表级和列级压缩的支持。 表压缩 The COMPRESSION clause sets the compression method for the c…

NASA:ATLAS/ICESat-2 L2 A标准化相对反向散射剖面V006

ATLAS/ICESat-2 L2A Normalized Relative Backscatter Profiles V006 ATLAS/ICESat-2 L2 A标准化相对反向散射剖面V006 简介 ATL04 包含大气层的沿轨迹归一化相对后向散射剖面图。 该产品包括完整的 532 nm(14 公里)未校准衰减后向散射剖面图&#xf…

mysql workbench 如何访问远程数据库

要使用 MySQL Workbench 访问远程数据库,可以按照以下步骤操作: 步骤 1:获取远程数据库的连接信息 首先,确保你有远程数据库的以下信息: 主机名(Host):通常是服务器的 IP 地址或域…

mysql把某一个字段的值中的aa,替换成bb

UPDATE my_table SET my_column REPLACE(my_column, aa, bb); 例 假设my_table表在替换前的数据如下: idmy_column1hello aa2world aa aa3no aa here 执行上述UPDATE语句后,my_table表的数据将变为: idmy_column1hello bb2world bb b…

vulnhub靶机:Holynix: v1

下载 下载地址:https://www.vulnhub.com/entry/holynix-v1,20/ 打开虚拟机 选择下载解压之后的文件打开 新添加一张 NAT 网卡,mac 地址修改如下 00:0c:29:bc:05:de 给原来的桥接网卡,随机生成一个 mac 地址 然后重启虚拟机 信息收集 主…

[网络]https的概念及加密过程

文章目录 一. HTTPS二. https加密过程 一. HTTPS https本质上就是http的基础上增加了一个加密层, 抛开加密之后, 剩下的就是个http是一样的 s > SSL HTTPS HTTP SSL 这个过程, 涉及到密码学的几个核心概念 明文 要传输的真正意思是啥 2)密文 加密之后得到的数据 这个密文…

10.索引下推

10.索引下推 10.1.什么是索引下推? (1)索引下推 (Index Condition Pushdown, ICP) 是 MySQL 5.6 中新特性,是一种在存储引擎层使用索引过滤数据的一种优化方式。 (2)如果没有 ICP,存储引擎会遍…

设计模式---中介者模式

设计模式---中介者模式 定义与设计思路中介者模式的引入:机场控制塔中介者模式的设计框架 定义与设计思路 定义:用一个中介对象来封装一系列对象交互。中介者使各对象不需要相互引用,从而使其耦合松散,而且可以独立地改变它们之间…

CISP-PTE CMS sqlgun靶场

sql靶场有个搜索框先点一下go,有回显说明存在漏洞 有个xss 然后在这里尝试sql注入 输入 -1 union select 1,2,3# 有回显可以查看数据库 然后查询数据库,用户 查询数据库的表名 查询它的数据这里admin用户的密码是md5加密 去解密看看 然后扫描ip目录发…

【ShuQiHere】 进位回补与溢出问题全解:二补码与一补码的进阶指南

【ShuQiHere】 在现代计算机系统中,数值运算的准确性和效率至关重要。无论是整数的加法还是减法,在处理负数、符号位和进位问题时,都可能遇到 进位回补(End-Around Carry) 和 溢出(Overflow) 等…

python Open3D 验证安装崩溃

环境 Win11 python 3.11.9 numpy 2.1.1 问题 根据官方指南安装了python的open3d库,但是在验证安装的时候,总是崩溃,详细内容参考GitHub Issue # Python API python -c "import open3d as o3d; \mesh o3d.geometry.TriangleMesh.cre…

Netty笔记06-组件ByteBuf

文章目录 概述ByteBuf 的特点ByteBuf的组成ByteBuf 的生命周期 ByteBuf 相关api1. ByteBuf 的创建2. 直接内存 vs 堆内存3. 池化 vs 非池化4. ByteBuf写入代码示例 5. ByteBuffer扩容6. ByteBuf 读取7. retain() & release()TailContext 释放未处理消息逻辑HeadContext 8. …

基于kolla-ansible在openEuler 22.03 SP4上部署OpenStack-2023.2

测试环境 openEuler-22.03-LTS-SP4-x86_64-dvd.iso Virtual Box,4 vCPU, 8G RAM, 50 vDisk。安装时删除/home,SWAP分区,全部空间给/目录。 目标是部署OpenStack All-In-One模式,控制节点计算节点存储节点在一台机器实现。 系统配…