首页 > 其他分享 >RabbitMQ 08 路由模式

RabbitMQ 08 路由模式

时间:2023-04-03 21:26:36浏览次数:43  
标签:return amqp 队列 08 springframework RabbitMQ org import 路由

路由模式

路由模式结构图:

  1. 定义配置类。

    import org.springframework.amqp.core.Binding;
    import org.springframework.amqp.core.BindingBuilder;
    import org.springframework.amqp.core.Exchange;
    import org.springframework.amqp.core.ExchangeBuilder;
    import org.springframework.amqp.core.Queue;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    /**
     * RabbitMQ配置类
     */
    @Configuration
    public class RabbitMqConfig {
        
        /**
         * 定义交换机,可以很多个
         * @return 交换机对象
         */
        @Bean
        public Exchange directExchange(){
            return ExchangeBuilder.directExchange("amq.direct").build();
        }
    
        /**
         * 定义消息队列
         * @return 消息队列对象
         */
        @Bean
        public Queue directQueue(){
            return new Queue("directQueue");
        }
    
        /**
         * 定义绑定关系
         * @return 绑定关系
         */
        @Bean
        public Binding binding1(@Qualifier("directExchange") Exchange exchange,
                                @Qualifier("directQueue") Queue queue){
            // 将定义的交换机和队列进行绑定
            return BindingBuilder
                    // 绑定队列
                    .bind(queue)
                    // 到交换机
                    .to(exchange)
                    // 使用自定义的routingKey
                    .with("test_springboot_key1")
                    // 不设置参数
                    .noargs();
        }
        
        /**
         * 定义绑定关系
         * @return 绑定关系
         */
        @Bean
        public Binding binding(@Qualifier("directExchange") Exchange exchange,
                               @Qualifier("directQueue") Queue queue){
            // 将定义的交换机和队列进行绑定
            return BindingBuilder
                    // 绑定队列
                    .bind(queue)
                    // 到交换机
                    .to(exchange)
                    // 使用自定义的routingKey
                    .with("test_springboot_key2")
                    // 不设置参数
                    .noargs();
        }
    }
    
  2. 定义消费者。

    import org.springframework.amqp.rabbit.annotation.RabbitListener;
    import org.springframework.stereotype.Component;
    
    /**
     * 直连队列监听器
     */
    @Component
    public class DirectListener {
    
        /**
         * 监听直连队列消息
         */
        @RabbitListener(queues = "directQueue")
        public void receiver(String message) {
            System.out.println("直连队列接收到消息:" + message);
        }
    }
    
  3. 定义生产者。

    import org.junit.jupiter.api.Test;
    import org.springframework.amqp.rabbit.core.RabbitTemplate;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    
    @SpringBootTest
    class RabbitMqSpringBootTests {
    
        /**
         * RabbitTemplate封装了大量的RabbitMQ操作,已经由Starter提供,因此直接注入使用即可
         */
        @Autowired
        private RabbitTemplate rabbitTemplate;
    
        /**
         * 生产者
         */
        @Test
        void producer()  {
    
            rabbitTemplate.convertAndSend("amq.direct", "test_springboot_key1", "Hello World");
            rabbitTemplate.convertAndSend("amq.direct", "test_springboot_key2", "Hello World");
        }
    
    }
    
  4. 启动生产者,发送消息。

    可以看到,不同的routingKey都发送到了目标队列进行消费,这就是路由模式。


标签:return,amqp,队列,08,springframework,RabbitMQ,org,import,路由
From: https://www.cnblogs.com/codesail/p/17284483.html

相关文章

  • linux 安装 rabbitmq
     RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。更新基本系统安装任何软件包之前,建议使用以......
  • php 扩展 rabbitmq popt
     首先是rabbitmq-c-master.tar.gz包,可以访问https://github.com/alanxz/rabbitmq-c去下载最新的wgethttps://github.com/alanxz/rabbitmq-c.gitwgethttps://github.com/alanxz/rabbitmq-c/archive/v0.10.0.tar.gz  0.8.0这个版本 对popt 要求低一些,如果你遇......
  • Flask 和pythonweb框架介绍、flask快速使用、登录,显示用户信息小案例、配置文件方式、
    Flask和pythonweb框架介绍、flask快速使用、登录,显示用户信息小案例、配置文件方式、路由系统Flask和pythonweb框架介绍Flask和pythonweb框架的区别:Django框架: 大而全,内置的app很多,第三方的app很多Flask框架: 小而精,没有过多的内置app,只能完成web框架的基本功能,很多功能......
  • rabbitmq消息队列之持久化
    在生产过程中,难免会发生服务器宕机的事情,RabbitMQ也不例外,可能由于某种特殊情况下的异常而导致RabbitMQ宕机从而重启,那么这个时候对于消息队列里的数据,包括交换机、队列以及队列中存在消息恢复就显得尤为重要了。RabbitMQ本身带有持久化机制,包括交换机、队列以及消息的持久化。......
  • 1 Flask 和pythonweb框架介绍、2 flask快速使用 、3 登录,显示用户信息小案例、4 配置
    目录1Flask和pythonweb框架介绍1.1flask介绍2flask快速使用3登录,显示用户信息小案例3.1login.html3.2home.html3.3detail.html3.4py文件4配置文件方式5路由系统5.1路由本质5.2路由参数add_url_rule5.3转换器1Flask和pythonweb框架介绍#pythonweb框架,本质都一......
  • Flask 和pythonweb框架介绍、flask快速使用、登录,显示用户信息小案例、配置文件方式、
    目录1Flask和pythonweb框架介绍1.1flask介绍2flask快速使用3登录,显示用户信息小案例3.1login.html3.2home.html3.3detail.html3.4py文件4配置文件方式5路由系统5.1路由本质5.2路由参数add_url_rule5.3转换器1Flask和pythonweb框架介绍#pythonweb框架,本质都一......
  • vue3路由跳转params传参接收不到
      这样路由可以跳转过去,但接收到了params是一个空对象。 解决方法由于之前的params传参在页面刷新之后,参数会丢失,所以vue将这种方法移除了。vue推荐的路由跳转传参方法:1.使用query传递参数2.使用vuex、pinia对参数进行存储3.使用HistoryAPI方式传递和接收  ......
  • RabbitMQ在本地环境下不消费数据
    packagecom.test.core.condition;importlombok.extern.slf4j.Slf4j;importorg.springframework.amqp.rabbit.annotation.RabbitListenerAnnotationBeanPostProcessor;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.stereoty......
  • OpenWrt 软路由 IPV6 配置 DDNS
    一、申请 dynv6 账号1、去官网注册一个账号,不过人机验证那块需要"梯子"才能注册成功FreedynamicDNSforIPv62、注册成功后,创建一个Domain,这是我已经创建好的3、输入一个你自己的域名,后缀选择dynv6.net 4、创建好后,点到这个域名下面,切换到instructions获取密码,后面需要......
  • vue: 路由报错后的处理方式(通常用在打包发布后的报错)
        用户在发包前进入了页面(也就是请求到了index.html),并且在index.html中可以得知将来要请求的异步组件的名字叫a.js,当服务器这时候发包,并且清空掉了a.js这个资源,改名叫a1.js。发包之后用户点击a.js对应的组件时,浏览器拿着先前在index.html得知的a.js这个......