RabbitMQ學習以及與Spring的集成(三)

本文介紹RabbitMQ與Spring的簡單集成以及消息的發送和接收。spring

在RabbitMQ的Spring配置文件中,首先須要增長命名空間。數組

xmlns:rabbit="http://www.springframework.org/schema/rabbit"

其次是模式文檔,這裏按1.0的來。緩存

xsi:schemaLocation="
     http://www.springframework.org/schema/rabbit
     http://www.springframework.org/schema/rabbit/spring-rabbit-1.0.xsd"

配置connection-factory元素。服務器

<rabbit:connection-factory id="connectionFactory"
                               username="mmq" password="mmq" host="192.168.1.138" port="5672" virtual-host="/vhost1" />

配置connection-factory元素實際是註冊一個org.springframework.amqp.rabbit.connection.CachingConnectionFactory實例。ui

參數介紹:this

id:bean的id值。編碼

host:RabbitMQ服務器地址。默認值"localhost"。xml

port:RabbitMQ服務端口,默認值"5672"。對象

virtual-host:虛擬主機,默認是"/"。接口

usernamepassword就是訪問RabbitMQ服務的帳戶和密碼了。

channel-cache-size:channel的緩存數量。新版本默認是25。

消息隊列queue的配置。

<!--定義queue queueTest -->
    <rabbit:queue name="queueTest" durable="true" auto-delete="false" exclusive="false"  />

參數介紹:

name:queue的名字。

durable:是否爲持久的。默認是true,RabbitMQ重啓後queue依然存在。

auto-delete:表示消息隊列沒有在使用時將被自動刪除。默認是false。

exclusive:表示該消息隊列是否只在當前connection生效。默認false。

 交換器exchange的配置。

<rabbit:direct-exchange name="exchangeTest" durable="true" auto-delete="false">
        <rabbit:bindings>
            <rabbit:binding queue="queueTest" key="queueTestKey"></rabbit:binding>
        </rabbit:bindings>
    </rabbit:direct-exchange>

參數介紹:

name:exchange的名字。

durable:是否爲持久的,默認爲true,RabbitMQ重啓後exhange依然存在。

auto-delete:表示exchange在未被使用時是否自動刪除,默認是false。

key:queue在該direct-exchange中的key值。當消息發送給該direct-exchange中指定key爲設置值時,消息將會轉發給queue參數指定的消息隊列。

Spring爲方便使用RabbitMQ服務,提供一個操做模板類:org.springframework.amqp.rabbit.core.RabbitTemplate。

<rabbit:template id="amqpTemplate"  connection-factory="connectionFactory" exchange="exchangeTest" />

配置也很簡單。template還有其餘的配置項,能夠本身查看xsd文件中的說明。

最後一個配置項是消息consumer。其實也能夠叫作listener。簡單的配置以下。

<rabbit:listener-container connection-factory="connectionFactory">
        <rabbit:listener  queues="queueTest" ref="messageConsumer"/>
    </rabbit:listener-container>

messageConsumer是一個簡單bean類,能夠用註解標識。

@Component("messageConsumer")
public class MessageConsumer implements MessageListener {
  public void onMessage(Message message) {}  
}

類做爲消息監聽器,必須實現接口MessageListener或者是接口ChannelAwareMessageListener。

另外一種配置方式是使用method參數,指定消息處理的方法,以org.springframework.amqp.core.Message類做爲方法參數。

配置完成並寫好消息監聽處理類後就能夠嘗試發送消息了。

複製代碼

public class MessageProducer{
  @Resource
   private AmqpTemplate amqpTemplate;

   public void sendMessage(){
        Message message = MessageBuilder.withBody("hello rabbit".getBytes("utf-8"))
                    .setMessageId(System.currentTimeMillis()+"")
                    .build();
        this.amqpTemplate.send("queueTestKey", message);

   }  

}

複製代碼

消息監聽方法。

public void onMessage(Message message){
   String content = new String(message.getBody(),"utf-8");
   system.out.println(content);
}

消息內容發送時會被轉換爲字節數組,默認以UTF-8進行編碼。若是想要發送對象信息,按照類實例的序列化和反序列化進行操做便可。

相關文章
相關標籤/搜索