rabbitMq-Spring AMQP

Spring-amqp是對AMQP協議的抽象實現,而spring-rabbit 是對協議的具體實現,也是目前的唯一實現。底層使用的就是RabbitMQ。

1. 依賴配置

如果按我之前的創建項目方式的話,idea是自動配置了,不需要手動添加,如果需要手動配置的話,需要添加一下依賴。

添加AMQP的啓動器:

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

application.yml中添加RabbitMQ地址:

spring:
  rabbitmq:
    host: 192.168.33.128
    username: guest
    password: guest
    virtual-host: /

2. 監聽者

在SpringAmqp中,對消息的消費者進行了封裝和抽象,一個普通的JavaBean中的普通方法,只要通過簡單的註解,就可以成爲一個消費者。

package com.example.rabbitmq_demo.rabbitmq.spring;

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;
import org.springframework.stereotype.Component;


@Component
public class Listener {

    @RabbitListener(bindings = @QueueBinding(
            value = @Queue(value = "spring.test.queue", durable = "true"),
            exchange = @Exchange(
                    value = "spring.test.exchange",
                    ignoreDeclarationExceptions = "true",
                    type = ExchangeTypes.TOPIC
            ),
            key = {"#.#"}))
    public void listen(String msg){
        System.out.println("接收到消息:" + msg);
    }
}

  • @RabbitListener:方法上的註解,聲明這個方法是一個消費者方法,需要指定下面的屬性:
    • bindings:指定綁定關係,可以有多個。值是@QueueBinding的數組。@QueueBinding包含下面屬性:
      • value:這個消費者關聯的隊列。值是@Queue,代表一個隊列
      • exchange:隊列所綁定的交換機,值是@Exchange類型
      • key:隊列和交換機綁定的RoutingKey

類似listen這樣的方法在一個類中可以寫多個,就代表多個消費者。

3. 發送者 AmqpTemplate

Spring最擅長的事情就是封裝,把他人的框架進行封裝和整合。

Spring爲AMQP提供了統一的消息處理模板:AmqpTemplate,非常方便的發送消息,其發送方法:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = RabbitmqDemoApplication.class)
public class MqDemo {

    @Autowired
    private AmqpTemplate amqpTemplate;

    @Test
    public void testSend() throws InterruptedException {
        String msg = "hello, Spring boot amqp -hi 海神號!";
        // 參數: 交換機、routingkey、 消息體
        this.amqpTemplate.convertAndSend("spring.test.exchange","a.b", msg);
        // 等待10秒後再結束
        Thread.sleep(10000);
    }
}

測試:
運行發送者代碼後,監聽者收到消息:
在這裏插入圖片描述 方式就是這樣,詳細使用還是那幾種消息模型,其他設置也是對rabbitmq的api的封裝,參看spring代碼不難理解。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章