首页 > 其他分享 >rabbitmq相关

rabbitmq相关

时间:2024-04-16 10:01:29浏览次数:16  
标签:fanout exchange 队列 rabbitmq 交换机 消息 相关 public

工作队列模型

workQueue,多个消费者绑定到一个队列,当队列堆积消息时,可使用work模型。

多个消费者绑定一个队列,同一条消息只会被一个消费者处理

通过设置prefetch来控制消费者预取的消息数量

spring:
  rabbitmq:
    listener:
      simple:
        prefetch: 1 # 每次只能获取一条消息,处理完成才能获取下一个消息

发布订阅模型

角色类型如下:

publisher,生产者

exchange,交换机,负责转发消息,不负责存储消息的能力

交换机类型如下:

Fanout,广播,将消息交给所有绑定交换机的队列

Direct,定向,把消息交给符合制定routing key的队列

Topic,通配符,把消息交给符合routing pattern的队列

consumer,消费者

queue,消息队列

在广播模式下,消息发送流程是这样的:

- 1)  可以有多个队列
- 2)  每个队列都要绑定到Exchange(交换机)
- 3)  生产者发送的消息,只能发送到交换机,交换机来决定要发给哪个队列,生产者无法决定
- 4)  交换机把消息发送给绑定过的所有队列
- 5)  订阅队列的消费者都能拿到消息

生产者代码

    public static final String EXCHANGE_NAME = "fanout_exchange";
    public static final String QUEUE_NAME = "fanout_queue1";    

    @Bean("fanout_exchange")//交换机
    public Exchange exchange(){
        return ExchangeBuilder.fanoutExchange(EXCHANGE_NAME).durable(true).build();
    }

    @Bean("fanout_queue1")//消息队列
    public Queue queue(){
        return QueueBuilder.durable(QUEUE_NAME).build();
    }

    @Bean//绑定交换机和消息队列1
    public Binding binding(@Qualifier("fanout_exchange")Exchange exchange,@Qualifier("fanout_queue1")Queue queue){
        return BindingBuilder.bind(queue).to(exchange).with("").noargs();
    }
    @Bean("fanout_queue2")//消息队列2
    public Queue queue2(){
        return QueueBuilder.durable("fanout_queue2").build();
    }

    @Bean//绑定交换机和消息队列2
    public Binding binding2(@Qualifier("fanout_exchange")Exchange exchange,@Qualifier("fanout_queue2")Queue queue){
        return BindingBuilder.bind(queue).to(exchange).with("").noargs();
    }

发送消息

    @Test
    void fanout_exchangeTest() {
        rabbitTemplate.convertAndSend(RabbitConfig.EXCHANGE_NAME,"","fanout,这是在广播...");
    }

消费者

    @RabbitListener(queues = "fanout_queue1")
    public void listenFanoutQueue1(Message message) {
        System.out.println("消费者1收到:"+new String(message.getBody()));
    }

    @RabbitListener(queues = "fanout_queue2")
    public void listenFanoutQueue2(Message message) {
        System.out.println("消费者2收到:"+new String(message.getBody()));
    }

 

标签:fanout,exchange,队列,rabbitmq,交换机,消息,相关,public
From: https://www.cnblogs.com/gstszbc/p/18137494

相关文章

  • 公文相关字体下载
    为提高党政机关公文的规范化、标准化水平,2012年6月29日,国家质量监督检验检疫总局、国家标准化管理委员会发了《党政机关公文格式》国家标准(GB/T9704-2012),该标准于2012年月7月1日起正式实施,该份文件可以在国家标准全文公开系统中查看。       仿宋,是一种中文字体。......
  • react native调试相关技巧
    ReactNative的Debug基础:https://reactnative.dev/docs/next/debugging   调出开发菜单DevMenu。cmd+D或Device->Shake   在DevMenu上可以选择“ShowElementInspector”,显示UI上的组件,但是这是直接在app上显示,不清楚,最好在DevTools上来查看元素。 ......
  • [转]Kafka与RabbitMQ区别
    Kafka和RabbitMQ都是流行的消息传递系统,但它们在设计和用途上有一些重要的区别。以下是它们之间的一些主要区别:1.消息传递模型:Kafka:Kafka是一个分布式流处理平台,主要用于处理实时数据流。它采用发布-订阅模型,消息被持久化保存在日志中,允许多个消费者以不同的速率消费消息。......
  • RabbitMQ重试机制
    RabbitMQ重试机制+死信队列RabbitMQ重试机制RabbitMQ的消息重试机制,就是消息消费失败后进行重试,重试机制的触发条件是消费者显式的抛出异常,这个很类似@Transactional,如果没有显式地抛出异常或者trycatch起来没有手动回滚,事务是不会回滚的。if("ACK重试机制".equals(messageBod......
  • 消息中间件RabbitMQ_RabbitMQ集群搭建8
    一、集群搭建概述摘要:实际生产应用中都会采用消息队列的集群方案,如果选择RabbitMQ那么有必要了解下它的集群方案原理一般来说,如果只是为了学习RabbitMQ或者验证业务工程的正确性那么在本地环境或者测试环境上使用其单实例部署就可以了,但是出于MQ中间件本身的可靠性、并发性......
  • 消息中间件RabbitMQ_RabbitMQ应用问题7
    一、RabbitMQ应用问题1、消息可靠性保障消息补偿机制2、消息幂等性保障乐观锁解决方案 二、消息可靠性保障需求: 100%确保消息发送成功 消息补偿:三、消息幂等性保障幂等性指一次和多次请求某一个资源,对于资源本身应该具有同样的结果。也就是说,其......
  • vue:日期的相关方法
    1、获取当天日期,格式:yyyy-MM-ddgetCurrentDate(n){vardd=newDate();if(n){dd.setDate(dd.getDate()-n);}varyear=dd.getFullYear();varmonth=dd.getMonth()+1<10?"0"+(dd.getMonth......
  • 消息中间件RabbitMQ_RabbitMQ高级特性6
    一、RabbitMQ高级特性消息可靠性投递ConsumerACK消费端限流TTL死信队列延迟队列日志与监控消息可靠性分析与追踪管理二、消息的可靠投递1、模式在使用RabbitMQ的时候,作为消息发送方希望杜绝任何消息丢失或者投递失败场景。RabbitMQ为我们提供了两种方式......
  • 算法相关读书笔记
    由于算法导论中涉及大量数学公式,在腾讯文档才能友好的展示,因此下面分享的为腾讯文档的链接个人能力有限,可能有的理解是错误的,请谅解,仅供分享和参考【腾讯文档】算法导论1~3部分【腾讯文档】算法导论第4~5部分【腾讯文档】算法导论第6部分22~24章【腾讯文档】算法导论第6部分2......
  • docker安装rabbitmq
    //查找镜像dockersearchrabbitmq//默认拉取官方最新版本dockerpullrabbitmq//创建容器,也可直接执行该命令,没有镜像会去先拉取镜像dockerrun-d--namemyrabbitmq-p5672:5672-p15672:15672rabbitmq//进入镜像dockerexec-it容器id/bin/bash//安装UI插件rabb......