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
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="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>
<?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檔案中加