SpringBoot 集成RabbitMQ

RabbitMQ是一個消息中間件,負責項目間消息的傳遞。使用消息中間件可以做到項目間解耦和消息的異步處理。支持多語言開發(fā)。

RabbitMQ原理:

首先是在RabbitMQ創(chuàng)建所需的exchange中轉(zhuǎn)站和queue隊列。創(chuàng)建exchange和queue可以通過服務器代碼實現(xiàn),也可以通過RabbitMQ提供的web管理界面或者http api來操作。

消息生產(chǎn)者服務器將消息發(fā)送到指定的exchange中轉(zhuǎn)站,中轉(zhuǎn)站接收到路由指定,將消息放入exchange通過routekey綁定的queue隊列,等待消息被消費。

消息消費者服務器連接到RabbitMQ,通過對指定queue隊列的監(jiān)聽來獲取消息。

同時RabbitMQ做了消息確認和消息持久化的方案來確保消息是否被消費和crash之后的消息的恢復。

RabbitMQ提供了豐富的http api接口供調(diào)用來監(jiān)控RabbitMQ的運行情況。

spring boot集成RabbitMQ使用:


引入jar包
pom.xml中增加

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

配置
在啟動類中增加:

@Bean(name = "demoQueue")
public Queue getQueue(){
    return new Queue("queueName");
}
@Bean(name = "demoExchange")
TopicExchange exchange() {
    return new TopicExchange("exchangeName");
}
@Bean
Binding binding(Queue demoQueue, TopicExchange demoExchange) {
    return BindingBuilder.bind(demoQueue).to(demoExchange).with("routingKey");
}

上面這段代碼的意思是:創(chuàng)建一個名為queueName的queue和名為exchangeName的exchange,然后通過名為routingKey的路由鍵將該queue綁定到exchange上。

這一步創(chuàng)建exchange和queue及綁定應該是在消息生成者中。之后才是發(fā)送消息。
消息是不會發(fā)送到一個不存在的queue上的。


簡單的消息發(fā)送

@Component
public class MessageSender{
    @Autowired
    private RabbitTemplate rabbitTemplate;
    //發(fā)送一個字符串
    public void send(String msg) {
        this.rabbitTemplate.convertAndSend("exchangeName","routingKey", msg);
    }
    //發(fā)送一個可序列化對象
    public void send(Job job) {
        this.rabbitTemplate.convertAndSend("exchangeName","routingKey", job);
    }
}

convertAndSend()方法提供了很多重載實現(xiàn)。傳遞的消息類型是object。
另外如果傳遞對象的話,該對象必須繼承了Serializable接口。同時,消息接收者必須有同樣的對象類來接收該消息,而且該對象類所處的包路徑必須一致才行。
消息發(fā)送可以繼承RabbitTemplate.ConfirmCallback接口來實現(xiàn)消息發(fā)送確認機制。


接收消息

@Component
@RabbitListener(queues = "queueName")
public class RabbitMqReciever {

    @RabbitHandler
    public void process(String hello) {
        System.out.println("Receiver : " + hello);
    }
    @RabbitHandler
    public void process(Job job) {
        System.out.println("Receiver : " + job);
    }
}

注解@RabbitListener()是指定接收消息的名為queueName的queue
如果有消息就根據(jù)消息類型的不同來調(diào)用不同的方法。


OVER!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評論 19 139
  • http://liuxing.info/2017/06/30/Spring%20AMQP%E4%B8%AD%E6%...
    sherlock_6981閱讀 16,198評論 2 11
  • 來源 RabbitMQ是用Erlang實現(xiàn)的一個高并發(fā)高可靠AMQP消息隊列服務器。支持消息的持久化、事務、擁塞控...
    jiangmo閱讀 10,506評論 2 34
  • @author Jacky wang轉(zhuǎn)載請注明出處,http://www.itdecent.cn/p/4cfeda...
    明天你好向前奔跑閱讀 874評論 0 11
  • 1.兄弟選擇器:(相連的兩個元素,不是子元素) p+b{ } 樣式表中,全局性的和局部性的優(yōu)先級,局部性的優(yōu)先級高...
    清風吹落花的香閱讀 259評論 0 0

友情鏈接更多精彩內(nèi)容