RabbitMQ:第一章:6 种工作模式以及消息确认机制

这篇具有很好参考价值的文章主要介绍了RabbitMQ:第一章:6 种工作模式以及消息确认机制。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

}

System.out.println(“发送数据成功”);

channel.close();

connection.close();

}

}

消费者一:

import com.liao.rabbitmq.utils.RabbitConstant;

import com.liao.rabbitmq.utils.RabbitUtils;

import com.rabbitmq.client.*;

import java.io.IOException;

/**

  • 消费者1

*/

public class ConsumerOne {

public static void main(String[] args) throws Exception {

Connection connection = RabbitUtils.getConnection();

final Channel channel = connection.createChannel();

channel.queueDeclare(RabbitConstant.QUEUE_SENDER_CONTENT, false, false, false, null);

//如果不写basicQos(1),则自动MQ会将所有请求平均发送给所有消费者

//basicQos,MQ不再对消费者一次发送多个请求,而是消费者处理完一个消息后(确认后),在从队列中获取一个新的

channel.basicQos(1);//处理完一个取一个

channel.basicConsume(RabbitConstant.QUEUE_SENDER_CONTENT , false , new DefaultConsumer(channel){

@Override

public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {

String jsonSMS = new String(body);

System.out.println(“ConsumerOne-发送成功:” + jsonSMS);

try {

Thread.sleep(10);

} catch (Exception e) {

e.printStackTrace();

}

//确认签收

channel.basicAck(envelope.getDeliveryTag() , false);

}

});

}

}

消费者二:

import com.liao.rabbitmq.utils.RabbitConstant;

import com.liao.rabbitmq.utils.RabbitUtils;

import com.rabbitmq.client.*;

import java.io.IOException;

/**

  • 消费者2

*/

public class ConsumerTwo {

public static void main(String[] args) throws IOException {

Connection connection = RabbitUtils.getConnection();

final Channel channel = connection.createChannel();

channel.queueDeclare(RabbitConstant.QUEUE_SENDER_CONTENT, false, false, false, null);

//如果不写basicQos(1),则自动MQ会将所有请求平均发送给所有消费者

//basicQos,MQ不再对消费者一次发送多个请求,而是消费者处理完一个消息后(确认后),在从队列中获取一个新的

channel.basicQos(1);//处理完一个取一个

channel.basicConsume(RabbitConstant.QUEUE_SENDER_CONTENT , false , new DefaultConsumer(channel){

@Override

public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {

String jsonSMS = new String(body);

System.out.println(“ConsumerTwo-发送成功:” + jsonSMS);

try {

Thread.sleep(100);

} catch (InterruptedException e) {

e.printStackTrace();

}

//确认签收

channel.basicAck(envelope.getDeliveryTag() , false);

}

});

}

}

消费者三:

import com.liao.rabbitmq.utils.RabbitConstant;

import com.liao.rabbitmq.utils.RabbitUtils;

import com.rabbitmq.client.*;

import java.io.IOException;

/**

  • 消费者3

*/

public class ConsumerThree {

public static void main(String[] args) throws IOException {

Connection connection = RabbitUtils.getConnection();

final Channel channel = connection.createChannel();

channel.queueDeclare(RabbitConstant.QUEUE_SENDER_CONTENT, false, false, false, null);

//如果不写basicQos(1),则自动MQ会将所有请求平均发送给所有消费者

//basicQos,MQ不再对消费者一次发送多个请求,而是消费者处理完一个消息后(确认后),在从队列中获取一个新的

channel.basicQos(1);//处理完一个取一个

channel.basicConsume(RabbitConstant.QUEUE_SENDER_CONTENT , false , new DefaultConsumer(channel){

@Override

public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {

String jsonSMS = new String(body);

System.out.println(“ConsumerThree-发送成功:” + jsonSMS);

try {

Thread.sleep(500);

} catch (InterruptedException e) {

e.printStackTrace();

}

//确认签收

channel.basicAck(envelope.getDeliveryTag() , false);

}

});

}

}

这里对每个消费者设置不同的休眠时间演示每个消费者处理业务的时间不同,查看消息消费的情况

RabbitMQ:第一章:6 种工作模式以及消息确认机制,程序员,rabbitmq,ruby,分布式RabbitMQ:第一章:6 种工作模式以及消息确认机制,程序员,rabbitmq,ruby,分布式RabbitMQ:第一章:6 种工作模式以及消息确认机制,程序员,rabbitmq,ruby,分布式RabbitMQ:第一章:6 种工作模式以及消息确认机制,程序员,rabbitmq,ruby,分布式RabbitMQ:第一章:6 种工作模式以及消息确认机制,程序员,rabbitmq,ruby,分布式

可以看出消费者一消费的最多,消费者三消费的最少,因为代码中设置了这个

channel.basicQos(1);//处理完一个取一个

消费者处理完一个消息后(确认后),在从队列中获取一个新的。


Pub/Sub 订阅模式

为了区分好理解,我每个模式都去创建一个虚拟机,这里我先去rabbitMq管控页面创建一个虚拟机

RabbitMQ:第一章:6 种工作模式以及消息确认机制,程序员,rabbitmq,ruby,分布式创建一个交换机:这里用广播模式作为交换机的类型用来演示

RabbitMQ:第一章:6 种工作模式以及消息确认机制,程序员,rabbitmq,ruby,分布式

修改工具类的虚拟机

RabbitMQ:第一章:6 种工作模式以及消息确认机制,程序员,rabbitmq,ruby,分布式

生产者:

import com.liao.rabbitmq.utils.RabbitConstant;

import com.liao.rabbitmq.utils.RabbitUtils;

import com.rabbitmq.client.Channel;

import com.rabbitmq.client.Connection;

import java.util.Scanner;

/**

  • 发布者

*/

public class Producer {

public static void main(String[] args) throws Exception {

Connection connection = RabbitUtils.getConnection();

//键盘输入

String input = new Scanner(System.in).next();

Channel channel = connection.createChannel();

//第一个参数交换机名字 其他参数和之前的一样

channel.basicPublish(RabbitConstant.EXCHANGE_CONTENT,“” , null , input.getBytes());

channel.close();

connection.close();

}

}

消费者一:

import com.liao.rabbitmq.utils.RabbitConstant;

import com.liao.rabbitmq.utils.RabbitUtils;

import com.rabbitmq.client.*;

import java.io.IOException;

/**

  • 消费者1

*/

public class ConsumerOne {

public static void main(String[] args) throws IOException {

//获取TCP长连接

Connection connection = RabbitUtils.getConnection();

//获取虚拟连接

final Channel channel = connection.createChannel();

//声明队列信息

channel.queueDeclare(RabbitConstant.QUEUE_ONE, false, false, false, null);

//queueBind用于将队列与交换机绑定

//参数1:队列名 参数2:交互机名 参数三:路由key(暂时用不到)

channel.queueBind(RabbitConstant.QUEUE_ONE, RabbitConstant.EXCHANGE_CONTENT, “”);

channel.basicQos(1);

channel.basicConsume(RabbitConstant.QUEUE_ONE , false , new DefaultConsumer(channel){

@Override

public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {

System.out.println(“消费者一收到信息:” + new String(body));

channel.basicAck(envelope.getDeliveryTag() , false);

}

});

}

}

消费者二:

import com.liao.rabbitmq.utils.RabbitConstant;

import com.liao.rabbitmq.utils.RabbitUtils;

import com.rabbitmq.client.*;

import java.io.IOException;

/**

  • 消费者2

*/

public class ConsumerTwo {

public static void main(String[] args) throws IOException {

//获取TCP长连接

Connection connection = RabbitUtils.getConnection();

//获取虚拟连接

final Channel channel = connection.createChannel();

//声明队列信息

channel.queueDeclare(RabbitConstant.QUEUE_TWO, false, false, false, null);

//queueBind用于将队列与交换机绑定

//参数1:队列名 参数2:交互机名 参数三:路由key(暂时用不到)

channel.queueBind(RabbitConstant.QUEUE_TWO, RabbitConstant.EXCHANGE_CONTENT, “”);

channel.basicQos(1);

channel.basicConsume(RabbitConstant.QUEUE_TWO , false , new DefaultConsumer(channel){

@Override

public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {

System.out.println(“消费者二收到信息:” + new String(body));

channel.basicAck(envelope.getDeliveryTag() , false);

}

});

}

}

演示效果:

RabbitMQ:第一章:6 种工作模式以及消息确认机制,程序员,rabbitmq,ruby,分布式

RabbitMQ:第一章:6 种工作模式以及消息确认机制,程序员,rabbitmq,ruby,分布式RabbitMQ:第一章:6 种工作模式以及消息确认机制,程序员,rabbitmq,ruby,分布式RabbitMQ:第一章:6 种工作模式以及消息确认机制,程序员,rabbitmq,ruby,分布式


Routing 路由模式

为了区分好理解,我每个模式都去创建一个虚拟机,这里我先去rabbitMq管控页面创建一个虚拟机

RabbitMQ:第一章:6 种工作模式以及消息确认机制,程序员,rabbitmq,ruby,分布式修改工具类的虚拟机

RabbitMQ:第一章:6 种工作模式以及消息确认机制,程序员,rabbitmq,ruby,分布式

创建交换机:这里的交换机type类型一定要改成routing模式,如果还是广播模式的fanout的话,跟上面发布和订阅模式出现的效果会是一样的。

错误实例:

RabbitMQ:第一章:6 种工作模式以及消息确认机制,程序员,rabbitmq,ruby,分布式正确的实例:

RabbitMQ:第一章:6 种工作模式以及消息确认机制,程序员,rabbitmq,ruby,分布式生产者:

import com.liao.rabbitmq.utils.RabbitConstant;

import com.liao.rabbitmq.utils.RabbitUtils;

import com.rabbitmq.client.Channel;

import com.rabbitmq.client.Connection;

import java.util.Iterator;

import java.util.LinkedHashMap;

import java.util.Map;

/**

  • 发布者

*/

public class Producer {

public static void main(String[] args) throws Exception {

Map area = new LinkedHashMap<String, String>();

area.put(“routing.one.a.20201127”, “中国湖南长沙20201127私密数据”);

area.put(“routing.one.d.20201128”, “中国河北石家庄20201128私密数据”);

area.put(“routing.two.b.20201127”, “中国湖北武汉20201127私密数据”);

area.put(“routing.two.e.20201128”, “中国湖北武汉20201128私密数据”);

area.put(“routing.three.c.20201127”, “中国湖南株洲20201128私密数据”);

area.put(“routing.three.f.20201128”, “中国河南郑州20201128私密数据”);

area.put(“us.one.a.20201127”, “美国加州洛杉矶20201127私密数据”);

area.put(“us.two.b.20201128”, “美国加州洛杉矶20201128私密数据”);

Connection connection = RabbitUtils.getConnection();

Channel channel = connection.createChannel();

Iterator<Map.Entry<String, String>> itr = area.entrySet().iterator();

while (itr.hasNext()) {

Map.Entry<String, String> me = itr.next();

//第一个参数交换机名字 第二个参数作为 消息的routing key

channel.basicPublish(RabbitConstant.EXCHANGE_CONTENT_ROUTING,me.getKey() , null , me.getValue().getBytes());

}

channel.close();

connection.close();

}

}

消费者一:

import com.liao.rabbitmq.utils.RabbitConstant;

import com.liao.rabbitmq.utils.RabbitUtils;

import com.rabbitmq.client.*;

import java.io.IOException;

/**

  • 消费者1

*/

public class ConsumerOne {

public static void main(String[] args) throws IOException {

Connection connection = RabbitUtils.getConnection();

final Channel channel = connection.createChannel();

channel.queueDeclare(RabbitConstant.QUEUE_ONE, false, false, false, null);

//queueBind用于将队列与交换机绑定

//参数1:队列名 参数2:交互机名 参数三:路由key

channel.queueBind(RabbitConstant.QUEUE_ONE, RabbitConstant.EXCHANGE_CONTENT_ROUTING, “routing.one.a.20201127”);

channel.queueBind(RabbitConstant.QUEUE_ONE, RabbitConstant.EXCHANGE_CONTENT_ROUTING, “us.one.a.20201127”);

channel.basicQos(1);

channel.basicConsume(RabbitConstant.QUEUE_ONE , false , new DefaultConsumer(channel){

@Override

public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {

System.out.println(“消费者1收到信息:” + new String(body));

channel.basicAck(envelope.getDeliveryTag() , false);

}

});

}

}

消费者二:

import com.liao.rabbitmq.utils.RabbitConstant;

import com.liao.rabbitmq.utils.RabbitUtils;

import com.rabbitmq.client.*;

import java.io.IOException;

/**

  • 消费者2

*/

public class ConsumerTwo {

public static void main(String[] args) throws IOException {

Connection connection = RabbitUtils.getConnection();

final Channel channel = connection.createChannel();

channel.queueDeclare(RabbitConstant.QUEUE_TWO, false, false, false, null);

//queueBind用于将队列与交换机绑定

//参数1:队列名 参数2:交互机名 参数三:路由key

channel.queueBind(RabbitConstant.QUEUE_TWO, RabbitConstant.EXCHANGE_CONTENT_ROUTING, “routing.one.d.20201128”);

channel.queueBind(RabbitConstant.QUEUE_TWO, RabbitConstant.EXCHANGE_CONTENT_ROUTING, “routing.two.e.20201128”);

channel.basicQos(1);

channel.basicConsume(RabbitConstant.QUEUE_TWO , false , new DefaultConsumer(channel){

@Override

public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {

System.out.println(“消费者2收到信息:” + new String(body));

channel.basicAck(envelope.getDeliveryTag() , false);

}

});

}

}

效果:

RabbitMQ:第一章:6 种工作模式以及消息确认机制,程序员,rabbitmq,ruby,分布式RabbitMQ:第一章:6 种工作模式以及消息确认机制,程序员,rabbitmq,ruby,分布式RabbitMQ:第一章:6 种工作模式以及消息确认机制,程序员,rabbitmq,ruby,分布式路由模式需要消费者指定路由key


Topics 通配符模式

为了区分好理解,我每个模式都去创建一个虚拟机,这里我先去rabbitMq管控页面创建一个虚拟机

RabbitMQ:第一章:6 种工作模式以及消息确认机制,程序员,rabbitmq,ruby,分布式修改工具类的虚拟机

RabbitMQ:第一章:6 种工作模式以及消息确认机制,程序员,rabbitmq,ruby,分布式

创建交互机,类型为topic

RabbitMQ:第一章:6 种工作模式以及消息确认机制,程序员,rabbitmq,ruby,分布式生产者:

import com.liao.rabbitmq.utils.RabbitConstant;

import com.liao.rabbitmq.utils.RabbitUtils;

import com.rabbitmq.client.Channel;

import com.rabbitmq.client.Connection;

import java.util.Iterator;

import java.util.LinkedHashMap;

import java.util.Map;

/**

  • 发布者

*/

public class Producer {

public static void main(String[] args) throws Exception {

Map area = new LinkedHashMap<String, String>();

area.put(“routing.one.a.20201127”, “中国湖南长沙20201127私密数据”);

area.put(“routing.one.d.20201128”, “中国河北石家庄20201128私密数据”);

area.put(“routing.two.b.20201127”, “中国湖北武汉20201127私密数据”);

area.put(“routing.two.e.20201128”, “中国湖北武汉20201128私密数据”);

area.put(“routing.three.c.20201127”, “中国湖南株洲20201128私密数据”);

area.put(“routing.three.f.20201128”, “中国河南郑州20201128私密数据”);

area.put(“us.one.a.20201127”, “美国加州洛杉矶20201127私密数据”);

area.put(“us.two.b.20201128”, “美国加州洛杉矶20201128私密数据”);

Connection connection = RabbitUtils.getConnection();

Channel channel = connection.createChannel();

Iterator<Map.Entry<String, String>> itr = area.entrySet().iterator();

while (itr.hasNext()) {

Map.Entry<String, String> me = itr.next();

//第一个参数交换机名字 第二个参数作为 消息的routing key

channel.basicPublish(RabbitConstant.EXCHANGE_CONTENT_TOPIC,me.getKey() , null , me.getValue().getBytes());

}

channel.close();

connection.close();

}

}

消费者一:

import com.liao.rabbitmq.utils.RabbitConstant;

import com.liao.rabbitmq.utils.RabbitUtils;

import com.rabbitmq.client.*;

import java.io.IOException;

/**

  • 消费者1

*/

public class ConsumerOne {

public static void main(String[] args) throws IOException {

Connection connection = RabbitUtils.getConnection();

final Channel channel = connection.createChannel();

channel.queueDeclare(RabbitConstant.QUEUE_ONE, false, false, false, null);

//queueBind用于将队列与交换机绑定

//参数1:队列名 参数2:交互机名 参数三:路由key

channel.queueBind(RabbitConstant.QUEUE_ONE, RabbitConstant.EXCHANGE_CONTENT_TOPIC, “..*.20201127”);

// channel.queueBind(RabbitConstant.QUEUE_ONE, RabbitConstant.EXCHANGE_CONTENT_TOPIC, “us.two.b.20201128”);

channel.basicQos(1);

channel.basicConsume(RabbitConstant.QUEUE_ONE , false , new DefaultConsumer(channel){

@Override

public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {

System.out.println(“消费者1收到信息:” + new String(body));

channel.basicAck(envelope.getDeliveryTag() , false);

}

});

}

}

消费者二:

import com.liao.rabbitmq.utils.RabbitConstant;

import com.liao.rabbitmq.utils.RabbitUtils;

import com.rabbitmq.client.*;

import java.io.IOException;

/**

  • 消费者2

*/

public class ConsumerTwo {

public static void main(String[] args) throws IOException {

//获取TCP长连接

Connection connection = RabbitUtils.getConnection();

//获取虚拟连接

final Channel channel = connection.createChannel();

//声明队列信息

channel.queueDeclare(RabbitConstant.QUEUE_TWO, false, false, false, null);

//指定队列与交换机以及routing key之间的关系

channel.queueBind(RabbitConstant.QUEUE_TWO, RabbitConstant.EXCHANGE_CONTENT_TOPIC, “us.#”);

channel.basicQos(1);

channel.basicConsume(RabbitConstant.QUEUE_TWO , false , new DefaultConsumer(channel){

@Override

public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {

System.out.println(“消费者2收到信息:” + new String(body));
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。RabbitMQ:第一章:6 种工作模式以及消息确认机制,程序员,rabbitmq,ruby,分布式

RabbitMQ:第一章:6 种工作模式以及消息确认机制,程序员,rabbitmq,ruby,分布式

RabbitMQ:第一章:6 种工作模式以及消息确认机制,程序员,rabbitmq,ruby,分布式

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

RabbitMQ:第一章:6 种工作模式以及消息确认机制,程序员,rabbitmq,ruby,分布式

知其然不知其所以然,大厂常问面试技术如何复习?

1、热门面试题及答案大全

面试前做足功夫,让你面试成功率提升一截,这里一份热门350道一线互联网常问面试题及答案助你拿offer

RabbitMQ:第一章:6 种工作模式以及消息确认机制,程序员,rabbitmq,ruby,分布式

2、多线程、高并发、缓存入门到实战项目pdf书籍

RabbitMQ:第一章:6 种工作模式以及消息确认机制,程序员,rabbitmq,ruby,分布式

RabbitMQ:第一章:6 种工作模式以及消息确认机制,程序员,rabbitmq,ruby,分布式

RabbitMQ:第一章:6 种工作模式以及消息确认机制,程序员,rabbitmq,ruby,分布式

3、文中提到面试题答案整理

RabbitMQ:第一章:6 种工作模式以及消息确认机制,程序员,rabbitmq,ruby,分布式

4、Java核心知识面试宝典

覆盖了JVM 、JAVA集合、JAVA多线程并发、JAVA基础、Spring原理、微服务、Netty与RPC、网络、日志、Zookeeper、Kafka、RabbitMQ、Hbase、MongoDB 、Cassandra、设计模式、负载均衡、数据库、一致性算法 、JAVA算法、数据结构、算法、分布式缓存、Hadoop、Spark、Storm的大量技术点且讲解的非常深入

RabbitMQ:第一章:6 种工作模式以及消息确认机制,程序员,rabbitmq,ruby,分布式

RabbitMQ:第一章:6 种工作模式以及消息确认机制,程序员,rabbitmq,ruby,分布式

RabbitMQ:第一章:6 种工作模式以及消息确认机制,程序员,rabbitmq,ruby,分布式
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

RabbitMQ:第一章:6 种工作模式以及消息确认机制,程序员,rabbitmq,ruby,分布式

知其然不知其所以然,大厂常问面试技术如何复习?

1、热门面试题及答案大全

面试前做足功夫,让你面试成功率提升一截,这里一份热门350道一线互联网常问面试题及答案助你拿offer

[外链图片转存中…(img-2SMWTO66-1711807198038)]

2、多线程、高并发、缓存入门到实战项目pdf书籍

[外链图片转存中…(img-cYdKwk9R-1711807198038)]

[外链图片转存中…(img-XDssikVI-1711807198038)]

[外链图片转存中…(img-uChXg9xG-1711807198039)]

3、文中提到面试题答案整理

[外链图片转存中…(img-f6916taY-1711807198039)]

4、Java核心知识面试宝典

覆盖了JVM 、JAVA集合、JAVA多线程并发、JAVA基础、Spring原理、微服务、Netty与RPC、网络、日志、Zookeeper、Kafka、RabbitMQ、Hbase、MongoDB 、Cassandra、设计模式、负载均衡、数据库、一致性算法 、JAVA算法、数据结构、算法、分布式缓存、Hadoop、Spark、Storm的大量技术点且讲解的非常深入

[外链图片转存中…(img-DMtRv7cH-1711807198039)]

[外链图片转存中…(img-TttZr13M-1711807198039)]

[外链图片转存中…(img-Xe8bgYg8-1711807198040)]
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!文章来源地址https://www.toymoban.com/news/detail-849186.html

到了这里,关于RabbitMQ:第一章:6 种工作模式以及消息确认机制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • rabbitmq消息确认机制

    (1) publish === broker 只要broker收到消息,就会执行 confirmCallback (2) exchange === queue 如果exchange有消息没有成功发送至queue,就会执行RuturnCallback,例:routing key错误导致发送消息到队列失败 (3)RabbitmqConfig (1) queue === consumer 默认是ack,consumer只要拿到消息就会自动确认,服务端

    2024年02月13日
    浏览(40)
  • RabbitMq 消息确认机制详解

    目录 1.消息可靠性 1.1.生产者消息确认 1.1.1.修改配置 1.1.2.定义Return回调 1.1.3.定义ConfirmCallback 1.2.消息持久化 1.2.1.交换机持久化 1.2.2.队列持久化 1.2.3.消息持久化 1.3.消费者消息确认 1.3.1.演示none模式 1.3.2.演示auto模式 1.4.消费失败重试机制 1.4.1.本地重试 1.4.2.失败策略 1.5.总结

    2024年01月21日
    浏览(43)
  • 8. springboot + rabbitmq 消息发布确认机制

    在 RabbitMQ之生产者发布确认原理章节已经介绍了rabbitmq生产者是如何对消息进行发布确认保证消息不丢失的。本章节继续看下springboot整合rabbitmq后是如何保证消息不丢失的。 消息正常是通过生产者生产消息传递到交换机,然后经过交换机路由到消息队列中,最后消费者消费,

    2023年04月25日
    浏览(59)
  • Rabbitmq入门与应用(六)-rabbitmq的消息确认机制

    确认消息是否发送给交换机 配置 编码RabbitTemplate.ConfirmCallback ConfirmCallback 是一个回调接口,消息发送到 Broker 后触发回调,确认消息是否到达 Broker 服务器, 也就是只确认是否正确到达 Exchange 中。 在配置类中编码确认回调函数。tips: 设置 rabbitTemplate.setMandatory(true); 配置类

    2024年02月20日
    浏览(42)
  • RabbitMQ的几种消息确认机制详细介绍

    前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章将详细介绍RabbitMQ的几种消息确认机制。 如果文章有什么需要改进的地方还请大佬不吝赐教 👏👏。 小威在此先感谢各位大佬啦~~🤞🤞 🏠个人主页:小威要向诸佬学习呀 🧑个人简介:大家好,我是

    2023年04月25日
    浏览(50)
  • 「RabbitMQ」实现消息确认机制以确保消息的可靠发送、接收和拒收

    目录 介绍 方案 配置手动确认 使用 「Bean 」 配置RabbitMQ的属性 确定消费、拒绝消费、拒绝消费进入死信队列 模拟生产者发送消息①         RabbitMQ 的消息确认机制应用场景非常广泛,尤其是在需要确保消息可靠性和避免消息丢失的场合下更为重要,例如:金融系统、电

    2024年02月08日
    浏览(39)
  • RabbitMQ消息可靠性投递与ACK确认机制

    什么是消息的可靠性投递 保证消息百分百发送到消息队列中去 保证MQ节点成功接收消息 消息发送端需要接收到MQ服务端接收到消息的确认应答 完善的消息补偿机制,发送失败的消息可以再感知并二次处理 RabbitMQ消息投递路径 生产者–交换机–队列–消费者 通过两个节点控制

    2024年02月20日
    浏览(46)
  • 【MQ 系列】SpringBoot + RabbitMq 消息确认/事务机制的使用姿势

    我们知道 RabbitMq 提供了两种机制,来确保发送端的消息被 brocke 正确接收,本文将主要介绍,在消息确认和事物两种机制的场景下,发送消息的使用姿势 首先创建一个 SpringBoot 项目,用于后续的演示 springboot 版本为 2.2.1.RELEASE rabbitmq 版本为  3.7.5   依赖配置文件 pom.xml 在 a

    2024年01月18日
    浏览(43)
  • 【RabbitMQ】RabbitMQ如何确认消息被消费、以及保证消息的幂等

    目录 一、如何保证消息被消费 二、如何保证消息幂等性 RabbitMQ提供了消息补偿机制来保证消息被消费,当一条消费被发送后,到达队列后发给消费者。消费者消费成功后会给MQ服务器的队列发送一个确认消息,此时会有一个回调检测服务监听该接收确认消息的队列,然将消费

    2024年02月16日
    浏览(38)
  • 消息中间件之八股面试回答篇:一、问题概览+MQ的应用场景+RabbitMQ如何保证消息不丢失(生产者确认机制、持久化、消费者确认机制)+回答模板

    目前主流的消息队列技术(MQ技术)分为RabbitMQ和Kafka,其中深蓝色为只要是MQ,一般都会问到的问题。浅蓝色是针对RabbitMQ的特性的问题。蓝紫色为针对Kafka的特性的问题。 MQ主要提供的功能为:异步 解耦 削峰 。 展开来讲就是 异步发送(验证码、短信、邮件…) MYSQL和Redi

    2024年01月24日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包