springboot rabbitmq 发布订阅 广播模式

根据amqp协议、rabbitmq入门、springboot集成rabbitmq 可知,rabbitmq的广播模式关键是使用fanout类型的exchange,fanout exchange会忽略message中的routing-key、queue中的binding-key,发给绑定exchange的全部queue。

创建fanout类型的exchange

import org.springframework.amqp.core.*;
@Configuration
public class MqConfig {
	/**
     * 定义广播交换机
     * @return
     */
    @Bean
    public FanoutExchange fanoutExchange() {
        final FanoutExchange fanoutExchange = new FanoutExchange("自定义广播类型的交换机名称");
        return fanoutExchange;
    }
}

发送

 @Autowired
 private AmqpTemplate amqpTemplate;
    
 //发送到订阅数据的exchange中
 amqpTemplate.convertAndSend("自定义广播类型的交换机名称",
 //fanout类型的exchange会忽略routing-key,所以这里的binding key传空字符串
    "",
    message);

消费

import org.springframework.amqp.core.ExchangeTypes;
import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.QueueBinding;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
/**
  * 将数据发送给队列1
  * @param message
  */
 @RabbitListener(bindings = @QueueBinding(value = @Queue(“自定义队列1”),
         exchange = @Exchange(value = "自定义广播类型的交换机名称",
                 type = ExchangeTypes.FANOUT),
                 //fanout类型exchange会忽略binding-key
         key = ""))
 public void doSynAddDataToJD(String message) {
     log.info("广播模式,同步数据给订阅方");
 }

  /**
  * 将数据发送给队列2
   * @param message
   */
  @RabbitListener(bindings = @QueueBinding(value = @Queue(“自定义队列2”),
          exchange = @Exchange(value = "自定义广播类型的交换机名称",
                  type = ExchangeTypes.FANOUT),
          key = ""))
  public void doSynAddDataToJD(String message) {
      log.info("广播模式,同步数据给订阅方");
  }

总结

实现发布订阅(广播模式)的关键在于对exchange类型的理解,可参考amqp协议、rabbitmq入门、springboot集成rabbitmqAMQP 0-9-1 Model Explained,源码中的类型有如下几种

package org.springframework.amqp.core;

/**
 * Constants for the standard Exchange type names.
 *
 * @author Mark Fisher
 * @author Gary Russell
 */
public abstract class ExchangeTypes {

	/**
	 * Direct exchange.
	 * routing key和binding key完全匹配
	 */
	public static final String DIRECT = "direct";

	/**
	 * Topic exchange.
	 * binding key可使用通配符来匹配routing key
	 */
	public static final String TOPIC = "topic";

	/**
	 * Fanout exchange.
	 * 会忽略routing key、binding key,消息发送到绑定exchange的全部queue
	 */
	public static final String FANOUT = "fanout";

	/**
	 * Headers exchange.
	 * 使用headers中的属性来匹配,有只匹配一项或者全部匹配可选
	 */
	public static final String HEADERS = "headers";

	/**
	 * System exchange.
	 * 这个类型,暂时缺乏相关资料。
	 */
	public static final String SYSTEM = "system";

}

相关推荐

  1. springboot rabbitmq 发布订阅 广播模式

    2023-12-16 07:38:05       48 阅读
  2. Redis发布-订阅模式之Channel的发布订阅

    2023-12-16 07:38:05       12 阅读
  3. js设计模式--发布订阅模式

    2023-12-16 07:38:05       12 阅读

最近更新

  1. k8s 使用 helm 文件部署 8.12.2 es 分角色集群

    2023-12-16 07:38:05       0 阅读
  2. 数据编码的艺术:sklearn中的数据转换秘籍

    2023-12-16 07:38:05       0 阅读
  3. android pdf框架-11,查看图片

    2023-12-16 07:38:05       0 阅读
  4. 深入探索:scikit-learn中递归特征消除(RFE)的奥秘

    2023-12-16 07:38:05       0 阅读
  5. 需求分析分类和层级、分析步骤

    2023-12-16 07:38:05       0 阅读
  6. js list to tree

    2023-12-16 07:38:05       1 阅读
  7. 02更新用户在线状态

    2023-12-16 07:38:05       1 阅读
  8. CSS魔法:link与@import的秘密较量

    2023-12-16 07:38:05       1 阅读
  9. 第12章:软件系统分析与设计

    2023-12-16 07:38:05       1 阅读

热门阅读

  1. k8s1.24+prometheus+grafana容器监控与告警

    2023-12-16 07:38:05       25 阅读
  2. 2-go-变量定义、类型、常量、函数

    2023-12-16 07:38:05       41 阅读
  3. flutter学习-day11-容器类组件

    2023-12-16 07:38:05       38 阅读
  4. 【Hadoop】WordCount源码分析

    2023-12-16 07:38:05       45 阅读
  5. Spring Boot中实现邮件推送

    2023-12-16 07:38:05       36 阅读
  6. 飞天使-实际运用安装rabbitmq

    2023-12-16 07:38:05       40 阅读
  7. 单片机Freertos入门(二)任务调度的介绍

    2023-12-16 07:38:05       33 阅读
  8. Stable Diffusion的数学原理

    2023-12-16 07:38:05       34 阅读