欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java RabbitMQ的三種Exchange模式

 更新時間:2022年08月18日 09:26:48   作者:劍圣無痕???????  
這篇文章主要介紹了Java RabbitMQ的三種Exchange模式,分別為Direct模式、Fanout模式、Topic模式,Rabbit的Direct Exchange模式是指消息發(fā)送導(dǎo)RouteKey中指定的Queue,Direct模式可以使用Rabbit自帶的Exchange

前言:

上一章講解RabbitMq的相關(guān)知識和如何使用Spring Boot集成Rabbitmq發(fā)送消息,本文將講解RabbitMQ三種Exchange模式。

簡介

RabbitMQ的Exchange通常有三種模式分別為:Direct模式、Fanout模式、Topic模式。

Direct模式

Rabbit的Direct Exchange模式是指消息發(fā)送導(dǎo)RouteKey中指定的Queue,Direct模式可以使用Rabbit自帶的Exchange,所以不需要將Exchange進行任何綁定。消息傳遞時,RouteKey必須完全匹配,消息才會被隊列接收,否則消息將會被拋棄。

原理如下圖:

示例代碼:

可以參考上一章的示例代碼,本文就不在重復(fù)闡述。

Fanout Exchange

Fanout Exchange 模式不處理路由鍵,只需要簡單的將隊列綁定到交換機上發(fā)送到交換機的消息都會被轉(zhuǎn)發(fā)到與該交換機綁定的所有隊列上。因此Fanout交換機轉(zhuǎn)發(fā)消息是最快的。

原理如下圖:

示例代碼

配置類

@Configuration
public class RabbmitFanoutConfig
{
    private final static String FANOUT_QUEUE_1 = "fanoutQueue1"; //隊列名稱1
    private final static String EXCHANGE_NAME = "fanoutExchange"; //交換器名稱

    @Bean
    public Queue queue1() {
        return new Queue(FANOUT_QUEUE_1);
    }

    @Bean
    public FanoutExchange fanoutExchange() {
        return new FanoutExchange(EXCHANGE_NAME);
    }

    @Bean
    public Binding bindingExchange1() {
        return BindingBuilder.bind(queue1()).to(fanoutExchange());
    }
}

生產(chǎn)者

@Component
public class FanOutMqProduce
{
    @Autowired
    private RabbitTemplate rabbitTemplate;

    public void sendMessage(String message)
    {
        rabbitTemplate.convertAndSend("fanoutExchange",null,message);

    }
}

說明:convertAndSend 第一個參數(shù)為Exchange的名稱,第二參數(shù)為routekey的名稱,由于Fanout不需要通過Routekey來綁定所以參數(shù)為空。

消費者

@Component
@RabbitListener(queues = "fanoutQueue1")
public class FanOutMqConsumer
{
    private static final Logger logger = LoggerFactory.getLogger(FanOutMqConsumer.class);

    @RabbitHandler
    public void receive(String message) 
    {
        logger.info("receive message content:{}",message);
    }
}

說明:監(jiān)聽隊列的名稱與配置的隊列名稱一致。

測試代碼

  @RequestMapping("/sendFanOutMessage")
    public String sendFanOutMessage()
    {
        fanOutMqProduce.sendMessage("this is fanout message");
        return "success";
    }

運行結(jié)果:

c.s.f.r.consumer.FanOutMqConsumer - receive message content:this is fanout message

Topic模式

Topic模式是通過Routing Key來進行通配符匹配。

  • 符號#代表可以匹配一個或多個詞
  • 符號*代表只能匹配一個詞

原理如下圖:

說明:例如:usa.#能夠匹配導(dǎo)usa.news.huofu,而europe.*只能匹配europe.news或者europe.weather

示例代碼

配置類

@Configuration
public class RabbmitTopicConfig
{
    private final static String TOPIC_QUEUE_A = "topic.QueueA"; //隊列名稱A
    private final static String TOPIC_QUEUE_B = "topic.QueueB"; //隊列名稱B
    private final static String EXCHANGE_NAME = "topicExchange"; //交換器名稱


    @Bean
    public Queue queueA() {
        return new Queue(TOPIC_QUEUE_A);
    }

    @Bean
    public Queue queueB() {
        return new Queue(TOPIC_QUEUE_B);
    }

    @Bean
    public TopicExchange topicExchange() {
        return new TopicExchange(EXCHANGE_NAME);
    }

    /**
     *
     * @return
     */
    @Bean
    public Binding bindingExchangeA() {
        return BindingBuilder.bind(queueA()).to(topicExchange()).with("topic.QueueA");
    }

    @Bean
    public Binding bindingExchange() {
        return BindingBuilder.bind(queueB()).to(topicExchange()).with("topic.#");
    }
}

消息發(fā)送者

@Component
public class TopicMqProduce
{
    @Autowired
    private RabbitTemplate rabbitTemplate;

    public void sendMessage(String message,String routeKey)
    {
        rabbitTemplate.convertAndSend("topicExchange",routeKey,message);

    }
}

消息接收者

#監(jiān)聽A隊列
@Component
@RabbitListener(queues = "topic.QueueA")
public class TopicMqConsumerA
{
    private static final Logger logger = LoggerFactory.getLogger(TopicMqConsumerA.class);
    @RabbitHandler
    public void receive(String message) 
    {
        logger.info("receive topic QueueA message content:{}",message);
    }
}

#監(jiān)聽B隊列
@Component
@RabbitListener(queues = "topic.QueueB")
public class TopicMqConsumerB
{
    private static final Logger logger = LoggerFactory.getLogger(TopicMqConsumerB.class);

    @RabbitHandler
    public void receive(String message) 
    {
        logger.info("receive topic QueueB message content:{}",message);
    }
}

測試代碼

#測試只發(fā)送A隊列
 @RequestMapping("/sendTopicMessageA")
    public String sendTopicMessageA()
    {
        topicMqProduce.sendMessage("topic.QueueA","this is fanout message");
        return "success";
    }

    @RequestMapping("/sendTopicMessageB")
    public String sendTopicMessageB()
    {
        topicMqProduce.sendMessage("topic.QueueB","this is fanout message");
        return "success";
    }

總結(jié)

到此這篇關(guān)于Java RabbitMQ的三種Exchange模式的文章就介紹到這了,更多相關(guān) Java Exchange模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java實現(xiàn)讀取txt文件并以在每行以空格取數(shù)據(jù)

    java實現(xiàn)讀取txt文件并以在每行以空格取數(shù)據(jù)

    今天小編就為大家分享一篇java實現(xiàn)讀取txt文件并以在每行以空格取數(shù)據(jù),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • java爬蟲Gecco工具抓取新聞實例

    java爬蟲Gecco工具抓取新聞實例

    本篇文章主要介紹了JAVA 爬蟲Gecco工具抓取新聞實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2016-10-10
  • spring+shiro 整合實例代碼詳解

    spring+shiro 整合實例代碼詳解

    本文通過實例代碼給大家介紹spring+shiro 整合的過程,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-10-10
  • idea遠程debug調(diào)試部署在tomcat上項目

    idea遠程debug調(diào)試部署在tomcat上項目

    本文主要介紹了idea遠程debug調(diào)試部署在tomcat上項目,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • springboot整合Mybatis-plus的實現(xiàn)

    springboot整合Mybatis-plus的實現(xiàn)

    這篇文章主要介紹了springboot整合Mybatis-plus的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2020-09-09
  • 從零開始Mybatis連接數(shù)據(jù)庫的方法

    從零開始Mybatis連接數(shù)據(jù)庫的方法

    這篇文章主要介紹了Mybatis連接數(shù)據(jù)庫的方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-02-02
  • java開發(fā)_圖片截取工具實現(xiàn)原理

    java開發(fā)_圖片截取工具實現(xiàn)原理

    本文將詳細介紹java開發(fā)_圖片截取工具實現(xiàn)原理,需要了解的朋友可以參考下
    2012-11-11
  • Java中隊列Queue和Deque的區(qū)別與代碼實例

    Java中隊列Queue和Deque的區(qū)別與代碼實例

    學(xué)過數(shù)據(jù)結(jié)構(gòu)的,一定對隊列不陌生,java也實現(xiàn)了隊列,下面這篇文章主要給大家介紹了關(guān)于Java中隊列Queue和Deque區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • 一篇文章帶你詳解Spring的概述

    一篇文章帶你詳解Spring的概述

    這篇文章主要為大家介紹了Spring的概述,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • Java實現(xiàn)ATM銀行管理系統(tǒng)(控制臺版本)

    Java實現(xiàn)ATM銀行管理系統(tǒng)(控制臺版本)

    這篇文章主要為大家詳細介紹了如何利用Java語言實現(xiàn)控制臺版本的ATM銀行管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06

最新評論