1. 程式人生 > >RabbitMQ學習之基於spring-rabbitmq的訊息非同步傳送

RabbitMQ學習之基於spring-rabbitmq的訊息非同步傳送

spring-rabbitmq的原始碼到http://github.com/momania/spring-rabbitmq下載,並可以下載例項程式碼。由於我使用的rabbitmq版本是3.0.4,部分程式碼做了調整。

具體例項如下(建立自動刪除非持久佇列):

1.資源配置application.properties

#============== rabbitmq config ====================
rabbit.hosts=192.168.36.102
rabbit.username=admin
rabbit.password=admin
rabbit.virtualHost=/
rabbit.exchange=spring-queue-async
rabbit.queue=spring-queue-async
rabbit.routingKey=spring-queue-async

2..傳送端配置applicationContext-rabbitmq-async-send.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">

     <context:property-placeholder location="classpath:application.properties"/>
     
     <bean id="rabbitConnectionFactory" class="com.rabbitmq.spring.connection.RabbitConnectionFactory">
        <property name="connectionFactory">
            <bean class="com.rabbitmq.client.ConnectionFactory">
               <property name="username" value="${rabbit.username}"/>
               <property name="password" value="${rabbit.password}"/>
               <property name="virtualHost" value="${rabbit.virtualHost}"/>
            </bean>
        </property>
        <property name="hosts" value="${rabbit.hosts}"/>
    </bean>
     <bean id="rabbitChannelFactory" class="com.rabbitmq.spring.channel.RabbitChannelFactory">
        <property name="connectionFactory" ref="rabbitConnectionFactory"/>
    </bean>
    
	<bean id="rabbitTemplate" class="com.rabbitmq.spring.template.ASyncRabbitTemplate">
        <property name="channelFactory" ref="rabbitChannelFactory"/>
        <property name="exchange" value="${rabbit.exchange}"/>
        <property name="routingKey" value="${rabbit.routingKey}"/>
        <!--optional-->
        <property name="exchangeType" value="TOPIC"/>
<!--         mandatory是否強制傳送       -->
        <property name="mandatory" value="false"/>
<!--         immediate是否立即傳送   -->
        <property name="immediate" value="false"/>
    </bean>
    
</beans>
3.接收端配置applicationContext-rabbitmq-async-receive.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">

     <context:property-placeholder location="classpath:application.properties"/>
     
     <bean id="rabbitConnectionFactory" class="com.rabbitmq.spring.connection.RabbitConnectionFactory">
        <property name="connectionFactory">
            <bean class="com.rabbitmq.client.ConnectionFactory">
               <property name="username" value="${rabbit.username}"/>
               <property name="password" value="${rabbit.password}"/>
               <property name="virtualHost" value="${rabbit.virtualHost}"/>
            </bean>
        </property>
        <property name="hosts" value="${rabbit.hosts}"/>
    </bean>
     <bean id="rabbitChannelFactory" class="com.rabbitmq.spring.channel.RabbitChannelFactory">
        <property name="connectionFactory" ref="rabbitConnectionFactory"/>
    </bean>
    
    <bean id="receiveMsgHandler" class="cn.slimsmart.rabbitmq.spring.rabbitmq.demo.async.ReceiveMsgHandler"/>
    
     <bean id="quotingParamtersTopicAdapter" class="com.rabbitmq.spring.listener.RabbitMessageListenerAdapter">
        <property name="channelFactory" ref="rabbitChannelFactory"/>
        <property name="delegate" ref="receiveMsgHandler"/>
        <property name="listenerMethod" value="handleMessage"/>
        <property name="exchange" value="${rabbit.exchange}"/>
        <!--optional-->
        <property name="exchangeType" value="TOPIC"/>
        <property name="routingKey" value="${rabbit.routingKey}"/>
        <property name="queueName" value="${rabbit.queue}"/>
        <property name="poolsize" value="5"/>
    </bean>
</beans>

4.訊息處理服務ReceiveMsgHandler.java

package cn.slimsmart.rabbitmq.spring.rabbitmq.demo.async;

public class ReceiveMsgHandler {

	public void handleMessage(String text) {
		System.out.println("Received: " + text);
	}
}

5.傳送端啟動程式碼Send.java
package cn.slimsmart.rabbitmq.spring.rabbitmq.demo.async;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.rabbitmq.spring.template.ASyncRabbitTemplate;

public class Send {

	public static void main(String[] args) throws InterruptedException {
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext-rabbitmq-async-send.xml");  
		ASyncRabbitTemplate amqpTemplate = context.getBean(ASyncRabbitTemplate.class);  
		for(int i=0;i<10000;i++){
			amqpTemplate.send("test spring async=>"+i); 
			Thread.sleep(100);
		}
	}
}
6.接收端啟動程式碼Send.java
package cn.slimsmart.rabbitmq.spring.rabbitmq.demo.async;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Receive {

	public static void main(String[] args) {
		 new ClassPathXmlApplicationContext("applicationContext-rabbitmq-async-receive.xml");
	}
}
先啟動接收端,再啟動傳送端。接收到訊息如下:
Received: test spring async=>0
Received: test spring async=>1
Received: test spring async=>2
Received: test spring async=>3
Received: test spring async=>4
Received: test spring async=>5
Received: test spring async=>6
Received: test spring async=>7
......

相關推薦

RabbitMQ學習基於spring-rabbitmq訊息非同步傳送

spring-rabbitmq的原始碼到http://github.com/momania/spring-rabbitmq下載,並可以下載例項程式碼。由於我使用的rabbitmq版本是3.0.4,部分程式碼做了調整。 具體例項如下(建立自動刪除非持久佇列): 1.資源配置a

RabbitMQ系列Spring RabbitMQ整合實現案例 非同步郵件傳送

摘要:給使用者傳送郵件的場景,其實也是比較常見的,比如使用者註冊需要郵箱驗證,使用者異地登入傳送郵件通知等等,在這裡我以 RabbitMQ 實現非同步傳送郵件。 專案git地址:https://github.com/gitcaiqing/RabbitMQ-Email 1.專案結構 2.

RabbitMQ系列Spring RabbitMQ整合

本文將會詳細介紹Spring和RabbitMQ整合,其中主要介紹路由模式(Routing)其他模式大體差不多就不一一介紹 專案git地址:https://github.com/gitcaiqing/SpringRabbitMQ 1.專案結構 2.建立Maven專案pom.xml引入關鍵

rabbitmq學習10:使用spring-amqp傳送訊息非同步接收訊息

 前面我們已經學習了傳送訊息及同步接收訊息的例子了。下面我們來看看如何通過spring配置來實現非同步接收訊息。    現在我們建立兩個WEB專案。傳送訊息的專案命名為”rabbitmq-demo-producer“ ,非同步接受的訊息專案名稱”rabbitmq-dem

rabbitmq學習路(三)訊息應答、持久化以及公平轉發

上兩篇博文簡單介紹了下rabbitmq的使用方式,接下來,筆者再給大家介紹下rabbitmq的基礎配置:設定訊息的應答、持久化以及公平轉發。 下面,筆者簡單的來解釋下這個三個配置: 1. 訊息應答: 預設情況下,只要有消費者,訊息進去佇列後,訊息就會被

RabbitMQ學習叢集訊息可靠性測試

之前介紹過關於訊息傳送和接收的可靠性:RabbitMQ學習之訊息可靠性及特性 下面主要介紹一下叢集環境下,rabbitmq例項宕機的情況下,訊息的可靠性。驗證rabbitmq版本【3.4.1】。 叢集環境要求: 1.叢集中至少有一臺硬碟節點 2.加入叢集

RabbitMQ學習筆記五:RabbitMQ優先級消息隊列

-c virtual 調用 itl 3.5 rri color images 執行順序 RabbitMQ優先級隊列註意點: 1、只有當消費者不足,不能及時進行消費的情況下,優先級隊列才會生效 2、RabbitMQ3.5以後才支持優先級隊列 代碼在博客:RabbitMQ學習筆

我的RabbitMQ學習1(介紹)

代理 tutorials 轉發數據 一個 mode 圖片 ssa 方式 初始化 官方網址:http://www.rabbitmq.com 我翻譯官網的文檔,僅供自己學習用................... RabbitMQ 是什麽,它就是一個消息隊列,用在哪裏,用

我的RabbitMQ學習旅3 (發布/訂閱)

fan 一點 簡單 圖片 數據 這一 auto sha 如果 在前面的教程中,我們創建了一個工作隊列。工作隊列背後的假設是,每個任務只被傳遞給一個工作人員。在這一部分,我們將做一些完全不同的事情 - 我們會向多個消費者傳遞信息。這種模式被稱為“發布/訂閱&rdq

RabbitMQ學習旅(一)

RabbitMQ學習總結(一) RabbitMQ簡介 RabbitMQ是一個訊息代理,其接收並轉發訊息。類似於現實生活中的郵局:你把信件投入郵箱的過程,相當於往佇列中新增資訊,因為所有郵箱中的信件最終都會彙集到郵局中;當郵遞員把你的新建傳送給收件人的時候,相當於訊息的轉發。 RabbitMQ中

Spring IoC學習基於XML的IoC

這裡實現一下基於XML方式的IoC,這裡沒有過多的理論,全是實際操作。 廢話不多說,直接寫程式碼。 這裡用的IDE是IDEA,用maven構建的專案,如果不會的依賴直接用jar包也行。先看專案結構和依賴。 這是專案結構使用maven構建的,如果不會直接構建簡單的java

RabbitMQ學習Linux下安裝(一)

CentOS 6.2 64bit 安裝erlang及RabbitMQ Server 1、作業系統環境(CentOS 6.2 64bit) [[email protected] ~]# cat /etc/issue CentOS release 6.2 (Final) Kernel \r on

RabbitMQ學習:(五)Exchange Type (轉貼+我的評論)

This is the fourth installment to the series: RabbitMQ for Windows.  In the last installment, we reviewed our Hello World example and introduced the con

RabbitMQ學習Java客戶端連線測試(二)

前面花了幾天糾結完RabbitMQ在Linux下的安裝之後,開始找簡單的例子來測試RabbitMQ和Java的連線。 和前面的安裝一樣,問題依舊。因為網上的帖子大多數都是很正常的步驟,並且沒有貼出來自己途中可能遇到的低階錯誤。 本文將沿用網上很經典的一個帖子來說出我過程中出

RabbitMq學習筆記(四)—— 訊息路由(Routing)

//宣告直連交換器 channel.exchangeDeclare(EXCHANGE_NAME, "direct"); // 獲取匿名佇列名稱 String queueName = channel.queueDeclare().getQueue()

RabbitMQ學習筆記八:RabbitMQ訊息確認

來源: https://blog.csdn.net/chenxyt/article/details/79259838 一、概述     前文說到RabbitMQ的交換機、佇列、訊息的持久化並不能100%的保證訊息不會丟失。首先從生產者端,持久化的訊息在

RabbitMQ學習佇列監控

對於RabbitMQ的監控,除了伺服器基本資訊(硬碟、CPU、記憶體、IO等)以及MQ的程序和埠,我們也可以通過請求url訪問管理API監控其叢集和佇列的情況。在java api 3.6.0以後,channel介面為我們提供瞭如下介面: /** * Retu

RabbitMQ學習四:釋出/訂閱(direct方式)

這篇文章主要學習下exchange型別的第二種型別:direct 在上一篇文章中,主要學習了RabbitMQ exchange的fanout(廣播方式),即producer傳送的訊息會被所有的消費者接收處理,有木有”強買強賣”的感覺呢(我不要你也塞給我,還

Rabbitmq學習路4-Federation

上一節學習了cluster,使得我們可以在一個cluster中同步各種訊息,不過有時候我們需要把一個cluster的訊息同步到另一個cluster中,比如線下測試,模仿使用者真實資料。       federation外掛是一個在不需要cluster,而在brokers之間

RabbitMQ學習筆記二:rabbitmq傳送接收訊息Helloworld(Java版)

一 引入rabbitmq java client 前面我們已經在本地(windows下)安裝配置好了RabbitMQ server。現在我們引入rabbitmq Java client。 在eclipse中建立一個maven專案,在pom.xml檔案中加