SpringBoot(九)RabbitMQ安装及配置和使用,消息确认机制
举例:https://blog.csdn.net/qq_35387940/article/details/100514134
Windows下RabbitMQ安装及配置地址: https://blog.csdn.net/zhm3023/article/details/82217222
RabbitMQ(四)订阅模式:https://blog.csdn.net/saytime/article/details/80541328
RabbitMQ(五)路由模式:https://blog.csdn.net/saytime/article/details/80541402
RabbitMQ(六)主题模式:https://blog.csdn.net/saytime/article/details/80541412
1、简单队列不足:即一个生产者对应一个消费者,一对一的关系,不支持多个消费者
2、工作队列模式:即一个生产者可以对应多个消费者同时消费,相比简单队列支持多消费者。
3、订阅模式:即一个生产者发送消息给多个消费者,且每个消费者都收到一次,也即是一个消息能够被多个消费者消费。类似于我们订阅同一微信公众号,微信公众号推送图文,我们每个人都能收到一份。
4、路由模式:跟订阅模式类似,只不过在订阅模式的基础上加上了类型,订阅模式是分发到所有绑定到交换机的队列,路由模式只分发到绑定在交换机上面指定路由键的队列。
5、主题模式:跟路由模式类似,只不过路由模式是指定固定的路由键,而主题模式是可以模糊匹配路由键,类似于SQL中=和like的关系。
//简单模式:// 获取连接.从连接开一个通道,发送消息到队列。 消费者消费队列的消息。
//订阅模式:// 获取连接.从连接开一个通道.声明一个fanout分发交换机.发送消息到交换机。消费者绑定到交换机。消费者消费具体的队列的消息。
/**
* 生产者
*/
public class Send {
private static final String EXCHANGE_NAME = "test_exchange_fanout";
public static void main(String[] args) throws IOException, TimeoutException {
// 获取连接
Connection connection = ConnectionUtil.getConnection();
// 从连接开一个通道
Channel channel = connection.createChannel();
// 声明一个fanout分发交换机
channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.FANOUT);
String message = "hello, ps";
// 发送消息
channel.basicPublish(EXCHANGE_NAME, "", null, message.getBytes());
System.out.println(" [x] Sent '" + message + "'");
channel.close();
connection.close();
}
}
/**
* 短信消费者
*/
public class Recv { // 短信队列
private static final String QUEUE_NAME = "test_queue_fanout_sms";
private static final String EXCHANGE_NAME = "test_exchange_fanout"; public static void main(String[] args) throws IOException, TimeoutException {
// 获取连接
Connection connection = ConnectionUtil.getConnection();
// 打开通道
Channel channel = connection.createChannel();
// 申明要消费的队列
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
// 绑定队列到交换机
channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, "");
// 这样RabbitMQ就会使得每个Consumer在同一个时间点最多处理一个Message。换句话说,在接收到该Consumer的ack前,他它不会将新的Message分发给它。
channel.basicQos(1);
// 创建一个回调的消费者处理类
Consumer consumer = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
// 接收到的消息
String message = new String(body);
System.out.println(" [1] Received '" + message + "'");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
System.out.println(" [1] done ");
channel.basicAck(envelope.getDeliveryTag(), false);
}
}
};
// 消费消息
channel.basicConsume(QUEUE_NAME, false, consumer);
}
}
RabbitMQ消息确认机制之事务机制:
1.服务器异常数据丢失问题?
第一种: AMQP 事务处理机制;https://blog.csdn.net/saytime/article/details/80541423
txSelect 将当前channel设置为transaction模式
channel.txCommit 提交当前事务
channel.txRollback 事务回滚
成功就是发送到服务器,失败可以捕获异常再重发。缺点:降低rabbirmq的性能。
第二种: confirm模式 。信号确认或者失败回复:
https://blog.csdn.net/cj337083172/article/details/79730438
1.同步:提交消息后,等待服务端回复后才算确认,概括的简单吧。
2.异步:使用监听方法,异步等待消息回调。 控制方式
开启confirm模式代码 : channel.confirmSelect();
1.同步确认,等待结果方法: channel.waitForConfirms() true-发送成功,false-发送失败
2.异步确认,直接添加一个监听,也能叫做监听模式:
channel.addConfirmListener(new ConfirmListener() {//实现返回处理方法... });
SpringBoot(九)RabbitMQ安装及配置和使用,消息确认机制的更多相关文章
- RabbitMQ学习系列(二): RabbitMQ安装与配置
上一篇,简单介绍了RabbitMQ的情况还有一些相关的概念,这一篇,会讲讲 RabbitMQ安装与配置. 1.安装 Rabbit MQ 是建立在强大的Erlang OTP平台上,因此安装RabbitM ...
- ELK+SpringBoot+Logback离线安装及配置
ELK+SpringBoot+Logback 离线安装及配置 版本 v1.0 编写时间 2018/6/11 编写人 xxx 目录 一. ELK介绍2 二. 安装环境2 三. Elasticse ...
- RabbitMQ(一):RabbitMQ 安装与配置(Mac)
一.rabbitmq 安装与配置 安装: brew install rabbitmq # 进入安装目录 cd /usr/local/Cellar/rabbitmq/3.7.12 # 启动 brew s ...
- 记一次RabbitMq 安装和配置坑
记一次RabbitMq 安装和配置坑 正常情况下安装 先安装erl ,在安装rabbitmq 这个在windows下的安装没什么技巧,按照默认一路下一步就ok.安装好后可以到cmd测试是否安装好. 测 ...
- windows RabbitMQ安装与配置
windows RabbitMQ安装与配置 1.安装Erlang 下载地址: http://www.erlang.org/downloads 注意: 右键以管理员身份进行安装,否则将导致后续无法启动 ...
- springboot + rabbitmq 用了消息确认机制,感觉掉坑里了
本文收录在个人博客:www.chengxy-nds.top,技术资源共享,一起进步 最近部门号召大伙多组织一些技术分享会,说是要活跃公司的技术氛围,但早就看穿一切的我知道,这 T M 就是为了刷KPI ...
- (转)RabbitMQ消息队列(九):Publisher的消息确认机制
在前面的文章中提到了queue和consumer之间的消息确认机制:通过设置ack.那么Publisher能不到知道他post的Message有没有到达queue,甚至更近一步,是否被某个Consum ...
- RabbitMQ消息队列(九):Publisher的消息确认机制
在前面的文章中提到了queue和consumer之间的消息确认机制:通过设置ack.那么Publisher能不到知道他post的Message有没有到达queue,甚至更近一步,是否被某个Consum ...
- Rabbitmq可靠消息投递,消息确认机制
前言 我们知道,消息从发送到签收的整个过程是 Producer-->Broker/Exchange-->Broker/Queue-->Consumer,因此如果只是要保证消息的可靠投 ...
随机推荐
- docker cp命令出错问题
docker cp 4e6:/etc/nginx/nginx.conf /home/nginx/conf 使用docker在复制官方nginx容器的conf文件时,发生了错误. Error respo ...
- 【朝花夕拾】Android自定义View篇之(二)Canvas常用功能
前言 转在请申明,转自[https://www.cnblogs.com/andy-songwei/p/10960012.html],谢谢! 上一篇讲View的绘制流程中讲到过,最后一步是draw流程, ...
- spark log4j 日志配置
现在我们介绍spark (streaming) job独立配置的log4j的方法,通过查看官方文档,要为应用主程序(即driver端)或执行程序使(即executor端)自定义log4j配置,需要两步 ...
- Android Fragment 隐藏或显示时调用的生命周期方法
Fragment使用方式大体分两种: 大家要注意不同的Fragment使用方法,Fragment隐藏和显示调用的生命周期方法是不同的,以下是Fragment显示隐藏调用的方法: //判断是否展示—与V ...
- Prism_Commanding(2)
Commanding 除了提供对要在视图中显示或编辑的数据的访问之外,ViewModel还可能定义可由用户执行的一个或多个动作或操作.用户可以通过UI执行的动作或操作通常被定义为命令.命令提供了一种方 ...
- C++ 深入浅出工厂模式(进阶篇)
介绍 前文初始篇C++ 深入浅出工厂模式(初始篇),主要阐述了简单工厂模式.工厂方法模式和抽象工厂模式的结构.特点和缺陷等.以上三种方式,在新增产品时,要么修改工厂类,要么需新增具体的工厂类,说明工厂 ...
- C# 新特性 操作符单?与??和 ?. 的使用
1.单问号(?) 1.1 单问号运算符可以表示:可为Null类型,C#2.0里面实现了Nullable数据类型 //A.比如下面一句,直接定义int为null是错误的,错误提示为无法将null转化成i ...
- Bootstrap Bootstrap表格插件bootstrap-table配置与应用小结
Bootstrap表格插件bootstrap-table配置与应用小结 by:授客 QQ:1033553122 1. 测试环境 win7 JQuery-3.2.1.min.js 下载地址: h ...
- 国内Maven仓库--阿里云Aliyun仓库地址及设置
aliyun Maven:http://maven.aliyun.com/nexus/#view-repositories 需要使用的话,要在maven的settings.xml 文 ...
- TSPITR fails With RMAN-06553 (Doc ID 2078790.1)
TSPITR fails With RMAN-06553 (Doc ID 2078790.1) APPLIES TO: Oracle Database - Enterprise Edition - V ...