首页 > 其他分享 >记录rabbitMQ的广播队列的错误使用导致未能正确广播的问题

记录rabbitMQ的广播队列的错误使用导致未能正确广播的问题

时间:2023-12-14 18:11:06浏览次数:34  
标签:队列 S2 rabbitMQ S3 广播 交换机 消息

背景说明:

有3个服务S1、S2、S3

现在服务S1需要发布消息到广播交换机E,并建立了两个普通队列Q1,Q2,将其绑定到广播交换机E上

服务S2和服务S3同时监听队列Q1,Q2

本意是,服务S1通过广播交换机E把消息同时推送给服务S2和S3

后面测试时,同事发现,服务S2和服务S3都只接收到了部分消息,而不是全部。

 

后面发现,广播交换机的广播对象是队列,而不是队列的消费者,而队列里面的一条消息只会发送给一个监听端,而不是群发,这就导致服务S2和服务S3均不能接收到全部消息。

 

rabbitMQ的设计都是以队列为基础,队列的消息分发只有轮询和公平分发两种策略,而广播/直连/主题交换机这些策略,仅针对交换机和队列之间的消息分发。

要实现消息广播,就必须每个消费端绑定一个单独的队列进行监听,然后将这个队列绑定到广播交换机,实现消息广播,或者通过信道创建临时队列接收消息。

生产端只需要将消息发布到广播交换机,而不需要关心消息会被发送到哪里。

 

标签:队列,S2,rabbitMQ,S3,广播,交换机,消息
From: https://www.cnblogs.com/zeromi/p/17901728.html

相关文章

  • 清空ActiveMQ中的Scheduled延时队列
    要清空ActiveMQ中的Scheduled延时队列,可以执行以下步骤:停止ActiveMQ服务器。在ActiveMQ数据存储目录中找到存储延时消息的目录。该目录的默认位置是<activemq_home>/data/localhost/Scheduled.删除该目录下的所有文件,这将清空延时队列中的消息。启动ActiveMQ服务器。请注意......
  • Java中的消息队列(MQ)应用实践
    摘要:本文将介绍Java中消息队列(MQ)的概念、应用场景以及如何使用Java中的消息队列进行实践。我们将探讨如何使用Java消息队列实现异步通信、解耦和流量削峰等常见需求,并通过实际案例展示其应用。一、引言在分布式系统中,消息队列(MQ)是一种常见的中间件技术,用于实现异步通信和解耦。通过......
  • RabbitMQ介绍
    一、RabbitMQ介绍1.1现存问题服务调用:两个服务调用时,我们可以通过传统的HTTP方式,让服务A直接去调用服务B的接口,但是这种方式是同步的方式,虽然可以采用SpringBoot提供的@Async注解实现异步调用,但是这种方式无法确保请求一定回访问到服务B的接口。那如何保证服务A的请求信息......
  • 广播代码(C语言)
    #include<stdio.h>#include<string.h>#include<unistd.h>#include<arpa/inet.h>#include<netinet/in.h>intmain(intargc,charconst*argv[]){//1.创建套接字intsockfd=socket(AF_INET,SOCK_DGRAM,0);if(sockfd......
  • 阻塞队列linkedBlockQuene和syncroBlockQuene的区别?
    在Java中,LinkedBlockingQueue和SynchronousQueue是两种不同类型的阻塞队列,它们有一些关键的区别:实现机制:LinkedBlockingQueue使用一个链表实现的有界或无界队列。有界队列的容量是固定的,而无界队列的容量理论上是无限的。SynchronousQueue是一个特殊的阻塞队列,它在内部......
  • RabbitMQ
    简介作用流量消峰:相当于等待队列。应用解耦:当子系统出现故障,该系统的要处理的信息被缓存在消息队列中,待修复完成后即可恢复。异步处理。四大核心概念生产者:产生数据发送消息的程序。交换机:一方面它接收来自生产者的消息,另一方面它将消息推送到队列中。队列:队列是Rabbit......
  • 【一个队列实现栈】Java队列——Queue接口-LinkedList实现类
    leetcode225.用队列实现栈题意:用一个队列实现栈题解:(1)弹栈:将队头开始的前size()-1个元素全部出队然后重新入队,使队尾元素循环到队头,然后弹出(2)获取栈顶元素:先将队头开始的前size()-1个元素全部出队然后重新入队,使队尾元素循环到队头,此时队头元素即为栈顶元素;然后再重新循环siz......
  • 【双栈实现队列】Java——Stack类
    leetcode232.用栈实现队列题意:双栈实现队列;要求每个入队、出队操作均摊O(1)复杂度题解:用一个栈in维护入队元素,另一个栈out维护出队元素出队或取队头元素:首先判断栈out是否为空,如果为空,将栈in中的元素pop()到栈out中,那么栈out栈顶元素即为原队列队头元素。(米奇妙妙屋啊~)判断......
  • 【leetcode 239. 滑动窗口最大值】Java优先队列——PriorityQueue类
    leetcode239.滑动窗口最大值题目描述:1e5大小的nums[]数组中长度为k(1<=k<=1e5)的窗口的最大值题解:暴力求解O(n^2)会超时,需要O(nlogn)的解法使用大根堆优先队列维护窗口元素,每次取最大值复杂度降为O(1),堆结构维护复杂度O(logn)问:如果维护窗口[l,r]前[0,l-1]的元素不影......
  • 数据结构---队列
    队列(Queue)是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。这种操作方式通常被称为FIFO(FirstInFirstOut,先进先出)。队列中的插入操作也被称为入队(enqueue),而删除操作则被称为出队(dequeue)。队列中的元素只能从一端(称为队头)添加......