路由模式

路由模式结构图:

  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都发送到了目标队列进行消费,这就是路由模式。


RabbitMQ 08 路由模式的更多相关文章

  1. RabbitMQ 的路由模式 Topic模式

    模型 生产者 package cn.wh; import java.io.IOException; import java.util.concurrent.TimeoutException; impo ...

  2. Rabbitmq(5) 路由模式

    设置路由键 发送者 package com.aynu.bootamqp.service; import com.aynu.bootamqp.commons.utils.Amqp; import com ...

  3. rabbitMQ的三种路由模式

    rabbitMQ工作流程: 1.声明交换机 2.声明消息队列 3.绑定交换机和队列 4.生产者往交换机里发送新消息 5.交换机根据所选的模式和routingKey决定消息发往哪条消息队列 6.一个消费 ...

  4. RabbitMQ (六) 订阅者模式之路由模式 ( direct )

    路由模式下,生产者发送消息时需要指定一个路由键(routingKey),交换机只会把消息转发给包含该路由键的队列 这里,我们改变一下声明交换机的方式. 我们通过管理后台添加一个交换机. 添加后,生产者 ...

  5. RabbitMQ六种队列模式-路由模式

    前言 RabbitMQ六种队列模式-简单队列RabbitMQ六种队列模式-工作队列RabbitMQ六种队列模式-发布订阅RabbitMQ六种队列模式-路由模式 [本文]RabbitMQ六种队列模式-主 ...

  6. RabbitMQ学习第四记:路由模式(direct)

    1.什么是路由模式(direct) 路由模式是在使用交换机的同时,生产者指定路由发送数据,消费者绑定路由接受数据.与发布/订阅模式不同的是,发布/订阅模式只要是绑定了交换机的队列都会收到生产者向交换机 ...

  7. RabbitMQ 一二事(4) - 路由模式介绍

    路由模式其实和订阅模式差不多,只不过交换机的类型不同而已 路由模式可以用下图来表示,比订阅模式多了一个key,举个栗子就是根据不同的人群来订阅公众号,来收取消息 根据不同的key来获取不同的消息 最简 ...

  8. python使用rabbitMQ介绍四(路由模式)

    一.模式介绍 路由模式,与发布-订阅模式一样,消息发送到exchange中,消费者把队列绑定到exchange上. 这种模式在exchange上添加添加了一个路由键(routing-key),生产者发 ...

  9. 阶段5 3.微服务项目【学成在线】_day05 消息中间件RabbitMQ_10.RabbitMQ研究-工作模式-路由工作模式介绍

    队列在绑定交换机的时候可以指定routingKey, 路由模式: 1.每个消费者监听自己的队列,并且设置routingkey. 2.生产者将消息发给交换机,由交换机根据routingkey来转发消息到 ...

  10. 【RabbitMQ】工作模式介绍

    一.前言 之前,笔者写过< CentOS 7.2 安装 RabbitMQ> 这篇文章,今天整理一下 RabbitMQ 相关的笔记便于以后复习. 二.模式介绍 在 RabbitMQ 官网上提 ...

随机推荐

  1. Jmeter 之 forEach控制器

    1 添加方法: 线程组右键-> 添加 -> 逻辑控制器 ->ForEach控制器   2 作用: 可以更方便JMeter后置处理器提取出来的多组数据,也可以定义具有特定规则的数据,用 ...

  2. 微软应用商店错误代码“0x80131500”怎么修复?

    处理方法一 打开"运行"输入 inetcpl.cpl ("WINDOWS"+"R"键,输入 inetcpl.cpl亦可),点开高级往下拉,勾 ...

  3. Linux 系统错误码 errno 剖析

    一.errno 介绍 1.1 errno 简介 Linux 中系统调用的错误都存储于错误码 errno 中.errno 由操作系统维护,存储就近发生的错误,即下一次的错误码会覆盖掉上一次的错误. er ...

  4. Vue3 写业务逻辑不适合用TS(TypeScript)

    TypeScript 最重要的就是装饰器 Vue3最重要更新就是Setup 装饰器就是为了打散功能点,Vue3的Setup功能也是打散功能点,那用Vue3上TS,感觉就是自己给自己多一层工作量. 我这 ...

  5. 单麦克风AI降噪模块及解决方案

    前记   随着以AI为核心的智能设备的广泛发展,语音这个非常重要的入口一直是很多厂商争夺的市场.作为音频采集的前端设备,能采集到的距离远,清晰度高,无噪声的信号是一个非常重要的能力.这样就对音频前端降 ...

  6. 【剑指 Offer II 118. 多余的边】并查集求回路

    class Solution { int[] parent; int[] rank; public void init(int n) { parent = new int[n + 1]; rank = ...

  7. [STM32]STM32双机蓝牙串口通信

    [STM32]STM32双机蓝牙串口通信 期末考完力,虽然GPA--,但也终于有空搓一搓32了 蓝牙模块配置 我们先配置蓝牙模块,需要主从兼容,配置过程可以参考这个博客:https://blog.cs ...

  8. 记录--你敢信?比 setTimeout 还快 80 倍的定时器

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 起因 很多人都知道,setTimeout是有最小延迟时间的,根据MDN 文档 setTimeout:实际延时比设定值更久的原因:最小延迟时 ...

  9. 记录--Echarts绘制气泡图

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 Echarts绘制气泡图 气泡图是一种用于可视化三维数据的图表类型,其中两个变量用于确定数据点在平面上的位置,另一个变量用于确定气泡的大小 ...

  10. IPython刷新函数模块

    技术背景 IPython是一个非常灵活好用的python终端工具,而且比Python自带的终端工具还多了命令行高亮和自动索引的功能,也是常用的Jupyter Notebook的基础工具.在使用IPyt ...