RabbitMQ 詳解(四)------Spring集成RabbitMQ

1.基本概念

Spring AMQP 是對Spring 基於AMQP的消息收發解決方案,它是一個抽象層,不依賴於特定的 AMQP Broker 實現和客戶端的抽象

<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
<version>1.3.5.RELEASE</version>
</dependency>

2.核心組件

1.ConnectionFactory
   Spring AMQP 的連接工廠接口,用於創建連接。CachingConnectionFactory 是ConnectionFactory 的一個實現類。

 2.RabbitAdmin
   RabbitAdmin 是 AmqpAdmin 的實現,封裝了對 RabbitMQ 的基礎管理操作,比如對交換機、隊列、綁定的聲明和刪除等、

// 聲明一個交換機
   rabbitAdmin.declareExchange(new DirectExchange("EXCHANGE", false, false));
// 聲明一個隊列
   rabbitAdmin.declareQueue(new Queue("QUEUE", false, false, false));
// 聲明一個綁定
   rabbitAdmin.declareBinding( new Binding("QUEUE", Binding.DestinationType.QUEUE,"EXCHANGE",   "admin", null));

 3.Message

Message 是 Spring AMQP 對消息的封裝。包含兩個重要的屬性:body:消息內容; messageProperties:消息屬性

  4.ReabbitTemplate 消息模板

 RabbitTemplate 是 AmqpTemplate 的一個實現,來簡化消息的收發,支持消息的確認(Confirm)與返回(Return)。封 裝 了 創 建 連 接 、 創 建 消 息 信 道 、 收 發 消 息 、 消 息 格 式 轉 換、關閉信道、關閉連接等等操作。針對於多個服務器連接,可以定義多個 Template。可以注入到任何需要收發消息的地方使用。

 5.Messager Listener 消息偵聽

MessageListener 是 Spring AMQP 異步消息投遞的監聽器接口,它只有一個方法onMessage,用於處理消息隊列推送來的消息

MessageListenerContainer可以理解爲MessageListener的容器,一個Container只有一個 Listener,但是可以生成多個線程使用相同的 MessageListener 同時消費消息。Container 可以管理 Listener 的生命週期,可以用於對於消費者進行配置。例如:動態添加移除隊列、對消費者進行設置,例如 ConsumerTag、Arguments、併發、消費者數量、消息確認模式等等。

@Bean
public SimpleMessageListenerContainer messageContainer(ConnectionFactory connectionFactory) {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory);
container.setQueues(getSecondQueue(), getThirdQueue()); //監聽的隊列
container.setConcurrentConsumers(1); // 最小消費者數
container.setMaxConcurrentConsumers(5); // 最大的消費者數量
container.setDefaultRequeueRejected(false); //是否重回隊列
container.setAcknowledgeMode(AcknowledgeMode.AUTO); //簽收模式
container.setExposeListenerChannel(true);
container.setConsumerTagStrategy(new ConsumerTagStrategy() { //消費端的標籤策略
@Override
public String createConsumerTag(String queue) {
return queue + "_" + UUID.randomUUID().toString();
}
});
return container;
}

 6. 轉換器 Message Convertor

 RabbitMQ 的消息在網絡傳輸中需要轉換成 byte[](字節數組)進行發送,消費者需要對字節數組進行解析。在 Spring AMQP 中,消息會被封裝爲 Message對象。消息的序列化和反序列化,就是處理 Message 的消息體 body 對象。如果消息已經是 byte[]格式,就不需要轉換。如果是 String,會轉換成 byte[]。如果是 Java 對象,會使用 JDK 序列化將對象轉換爲 byte[](體積大,效率差)。在 調 用 RabbitTemplate 的 convertAndSend() 方 法 發 送 消 息 時 , 會 使 用MessageConvertor 進行消息的序列化,默認使用 SimpleMessageConverter。在某些情況下,我們需要選擇其他的高效的序列化工具。如果我們不想在每次發送消息時自己處理消息,就可以直接定義一個 MessageConvertor。

@Bean
public RabbitTemplate rabbitTemplate(final ConnectionFactory connectionFactory) {
final RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
rabbitTemplate.setMessageConverter(new Jackson2JsonMessageConverter());
return rabbitTemplate;
}

 

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