rabbitmq
文章平均质量分 57
qq_42212926
小白鼠一个
展开
-
RabbitMQ之备份交换机
在RabbitMQ中,我们并不知道该如何处理这些无法路由的消息,最多打个日志,然后触发报警,再来手动处理。而通过日志来处理这些无法路由的消息很不优雅,特别是所在的服务器有多台机器的时候。所以这里就可以使用备份交换机来把这些无法路由的消息全部放到备份交换机的备份队列里面。代码架构图:配置类代码如下所示:@Configurationpublic class ConfirmConfig { //交换机名称 public static final String CONFIRM_EXCHAN原创 2022-04-04 16:50:02 · 1864 阅读 · 0 评论 -
RabbiiMQ借助队列TTL实现延迟队列
队列TTL代码架构图创建两个队列QA和QB,两者队列TTL分别设置为10s和40s,然后再创建一个交换机X和死信交换机Y,他们的类型都是direct,创建一个死信队列QD,他们的绑定关系如下:队列和交换机配置类代码@Configurationpublic class ExerciseTtlQueueConfig { private static final String X_EXCHANGE = "X"; private static final String QUEUE_A =原创 2022-04-04 16:08:43 · 1501 阅读 · 0 评论 -
RabbbitMQ之死信队列的三大来源(TTL,队列最大长度,消息被拒绝)
死信队列死信,顾名思义就是无法被消费的消息,字面意思可以这样理解,一般来说,producer将消息投递到broker或者直接到queue里了,consumer从queue取出消息进行消费,但是某些时候由于特定的原因queue中的某些消息无法被消费,这样的消息如果没有后续的处理,就变成了死信,有死信当然就有死信队列。死信的来源1.消息TTL过期2.队列达到最大长度(队列满了,无法再添加数据到mq中)3.消息被拒绝死信队列代码架构图可以看出死信消息的处理过程是与正常队列有关,如果消息在正常队列中不原创 2022-04-04 14:30:28 · 598 阅读 · 0 评论 -
RabbitMQ之主题交换机
RabbitMQ之主题交换机RabbitMQ中的交换机大致分为四种,默认,直连(Direct),主题(Topic),扇形(Fanout),其中灵活性最大的应该算是Topic主题交换机了。主题交换机中的路由键有两个替换符需要大家注意到:*(星号)可以代替一个单词#(井号)可以代替零个或多个单词主题交换机生产者代码public class EmitLogTopic { public static final String EXCHANGE_NAME = "topic_logs";原创 2022-04-04 12:40:19 · 2173 阅读 · 0 评论 -
RabbitMQ之直连交换机(Direct exchange)
直连交换机上一篇博客中讲解了扇形交换机,但是由于扇形交换机属于广播类型的交换机,如果我们需要一对一这种类型的发送接收消息,使用扇形交换机就不太合适,可以使用直连交换机。直连交换机直连交换机生产者代码public class DirectLogs { //交换机的名称 public static final String EXCHANGE_NAME = "direct_logs"; public static void main(String[] args) throws E原创 2022-04-04 12:17:42 · 1056 阅读 · 0 评论 -
RabbitMQ之扇形交换机
ExchangesExchange概念RabbitMQ消息传递模型的核心思想是:生产者生产的消息从不会直接发送到队列中,而是发送到交换机,并且生产者都不知道这些消息 传递到了那些队列中。交换机总共有以下几种类型:扇形交换机(fanout),主题交换机(topic),直联交换机(direct),默认交换机(“”)在前面博客中我们直接声明一个队列,然后交换机那块直接使用“”代替,实际上我们使用的就是默认或无名称交换机。消息能够发送到队列中是由于routingkey绑定的key指定的。此处表示默认交换原创 2022-04-03 18:09:32 · 1127 阅读 · 0 评论 -
RabbitMQ之发布确认(单个发布确认,批量发布确认,异步发布确认)
RabbitMQ之发布确认发布确认原理生产者将信道设置成confirm模式,一旦信道进入confirm模式,所有在该信道上面发布的消息都将会被指派一个唯一的ID(从1开始),一旦消息被投递到所有匹配的队列之后,broker就会发送一个确认给生产者,(包含消息的唯一ID),这就使得生产者知道消息已经正确到达目的队列了,如果消息和队列是可持久化的,那么确认消息会在将消息写入磁盘之后发出,,broker回传到生产者的确认消息中delivery-tag域包含了确认消息的序列号。confirm模式最大的好处在于原创 2022-04-03 17:22:53 · 2593 阅读 · 3 评论 -
RabbitMQ持久化,不公平分发,预取值
RabbitMQ持久化默认情况下RabbitMQ退出或由于某种原因崩溃时,他忽视队列和消息,除非告知它不要这么做。确保消息不会丢失需要做两件事情:我们需要将队列和消息都标记为持久化。队列如何实现持久化队列创建时如果没有选择持久化,那么rabbitmq重启时,该队列就会被删除,如果要实现队列持久化,只需要在生命队列时把持久化参数(durable)设置为true,则队列就会自动设置成持久化队列。就是有一点需要注意,如果在声明该队列为持久化队列之前,该队列在rabbitmq中已经存在,并且不是持久化的,原创 2022-04-03 12:19:43 · 318 阅读 · 0 评论 -
RabbitMQ之手动应答消息(消息不丢失)
RabbitMQ之手动应答消息1.为什么需要手动应答当消费者完成一个任务需要一段时间,如果其中一个消费者处理一个长的任务并且只处理了部分突然他挂掉了,会发生什么情况。RabbitMQ一旦向消费者传递了一条消息,便立即将该条消息标记为删除。在这种情况下,突然有个消费者挂掉了,我们将丢失正在处理的消息。以及后续发送给该消费者的消息,因为他无法接收到。2.应答分类2.1手动应答相应的,使用手动应答时,需要把autoAck属性设置为false,然后进行手动应答。消息手动应答 有如下几个方法A.Chan原创 2022-03-25 21:26:55 · 3799 阅读 · 1 评论 -
RabbitMQ之轮询模式
RabbitMQ之轮询模式 在这个案例中我们会启动两个工作线程,一个消息发送线程,两个工作线程。然后在发送线程中不断发送消息,验证两个工作线程是以何种方式拿到消息的。1.发送消息线程代码public class ExerciseT { private static final String QUEUE_NAME = "hello"; public static void main(String[] args) throws IOException, TimeoutException原创 2022-03-25 19:51:22 · 2761 阅读 · 0 评论 -
RabbitMQ进行简单的消息发送和消费
RabbitMQ进行简单的消息发送和消费在完成该功能之前,需要在虚拟机上下载安装rabbitmq,并且通过网页可以访问到rabbitmq server,可以参考我的上篇文章linux上下载以及安装rabbitmq1.不管使用什么组件,第一步都是导入相关依赖 <dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</a原创 2022-03-25 17:02:42 · 4587 阅读 · 0 评论 -
linux虚拟机上下载安装rabbitMQ
centos虚拟机中从头开始搭建rabbitmq服务原创 2022-03-20 22:13:43 · 2083 阅读 · 0 评论