spring boot操作rabbitmq的工作佇列示例
專案基礎結構參考:
原始碼:
工作過程
生產者每隔1秒傳送一條資訊到test_work_queue佇列中
工作佇列有兩種工作方式:
輪詢分發round-robin:
程式碼裡進行了測試,將consumer01執行緒暫停4秒再執行,在round-robin情況下,仍會輪詢分發。
結果:
生產者
消費者1:
由於sleep 4s,所以執行起來要比消費者2慢很多
消費者2:
雖然消費者2執行的快,但是由於設定為round-robin,不會多進行訊息處理
公平分發fairdispatch:
告訴RabbitMQ不要同時將多個訊息分派給一個工作者,換句話說,在某個工作者處理完一條訊息並確認它之前,RabbitMQ不會給該工作者分派新的訊息,而是將新的訊息分派給下一個不是很繁忙的工作者 這就是fair dispatch
//如果不設定,預設是round-robin
factory.setPrefetchCount(1);
並且註釋掉(為什麼要註釋掉呢?)
factory.setAcknowledgeMode(AcknowledgeMode.MANUAL);
結果:
消費者1:
消費者2:
可以看到目前是fairdispatch方式
訊息應答和訊息持久化
注意以下兩點:
1. 自動應答
為true說明佇列把訊息給消費者之後就將訊息從其記憶體中刪除。如果殺掉正在執行任務的消費者,就會丟失訊息。
為false,關閉自動應答,說明佇列把訊息給消費者之後要等待消費者的確認處理完成訊息。如果未收到消費者的確認處理完成訊息,就會分發給其他消費者,保證訊息不丟失。
factory.setAcknowledgeMode(AcknowledgeMode.MANUAL);
2. 訊息持久化
如果rabbitmq掛了,那麼儲存在記憶體中的訊息就會丟失了,這裡涉及到durable的問題。將佇列設定為durable實現訊息持久化
@Bean
public Queue queue(){
return new Queue(QUEUE_NAME,true);
}
參考:
RabbitMQ入門教程 For Java【2】 - Work Queues相關推薦
spring boot操作rabbitmq的工作佇列示例
專案基礎結構參考:原始碼:工作過程生產者每隔1秒傳送一條資訊到test_work_queue佇列中工作佇列有兩種工作方式:輪詢分發round-robin:程式碼裡進行了測試,將consumer01執行緒暫停4秒再執行,在round-robin情況下,仍會輪詢分發。結果:生產者
spring boot操作rabbitmq的釋出訂閱佇列示例
專案基礎結構參考:工作過程:生產者每個1秒將訊息傳送給rabbitmq的fanout型別的Exchange上,fanout不處理路由routingkey,只要與之繫結的佇列都能收到訊息。兩個消費者宣告不同的佇列佇列,並繫結到Exchange上注意:exchanger沒有儲存訊
Spring Boot 實現 RabbitMQ 延遲消費和延遲重試佇列
並增加了自己的一些理解,記錄下來,以便日後查閱。 專案原始碼: 背景 何為延遲佇列? 顧名思義,延遲佇列就是進入該佇列的訊息會被延遲消費的佇列。而一般的佇列,訊息一旦入隊了之後就會被消費者馬上消費。 延遲佇列能做什麼?延遲佇列多用於需要延遲工作的場景。最常見的是以下兩種場景: 延遲消費。比如:使用者生成
如何使用Spring Boot與RabbitMQ結合實現延遲佇列
背景 何為延遲佇列? 顧名思義,延遲佇列就是進入該佇列的訊息會被延遲消費的佇列。而一般的佇列,訊息一旦入隊了之後就會被消費者馬上消費。 延遲佇列能做什麼?延遲佇列多用於需要延遲工作的場景。最常見的是以下兩種場景:延遲消費。比如: 使用者生成訂單之後
Spring Boot文件上傳示例(Ajax和REST)
模型 custom rop null nds con and 程序 docs 本文介紹如何使用Ajax請求在Spring Boot Web應用程序(REST結構)中上傳文件。 本文中使用的工具: Spring Boot 1.4.3.RELEASE Spring 4.3.5
spring boot 操作MySQL pom添加的配置
version pri nec style -c 1.0 work ng- jdb 1 在項目中的pom.xml配置文件添加依賴 <!--MySQL依賴 --> <dependency> <groupId>my
Spring Boot (25) RabbitMQ消息隊列
res bin context 程序 了解 可靠 版本 prope message MQ全程(Message Queue)又名消息隊列,是一種異步通訊的中間件。可以理解為郵局,發送者將消息投遞到郵局,然後郵局幫我們發送給具體的接收者,具體發送過程和時間與我們無關,常見的MQ
Spring boot操作數據庫
data- group tid mysq pos nec boot sta mys 1.首先需要添加支持依賴 <dependency> <groupId>org.springframework.boot</groupId>
Spring Boot AMQP+RabbitMq
主要解決兩個問題: 1如何傳送/釋出訊息(將java物件序列化為json),通過使用RabbitTemplate 2如何讀取消費訊息(json反序列化為java物件)使用@RabbitListener註解 amqp是一個規範,一種定義了兩個系統間通過訊息進行互動的協議,而RabbitMQ
rabbitmq--工作佇列(單發多收)模型
上一篇,我們介紹了rabbitmq中最簡單的一種模型——收發模型,收、發都只有一方,即一個應用,並且不涉及到exchange (實際上這種模型中也是有exchange的,exchange的型別為direct,且名稱為空字串"",只不過這裡的exchange是透明的,故常被我們所忽略了,好像收、發
Spring-boot 整合RabbitMQ ------基於註解的開發
spring: rabbitmq: host: 192.168.3.193 username: guest password: guest package com.shi.amqp; import org.springframework.amqp.rab
Spring Boot @Enable*註解工作原理
一、讀取配置檔案 --application.properties tomcat.host=192.168.1.1 tomcat.port=8080 package vip.fkandy.model; import org.springframework.boot.context.pr
MongoDB最簡單的入門教程之四:使用Spring Boot操作MongoDB
Spring Boot 是一個輕量級框架,可以完成基於 Spring 的應用程式的大部分配置工作。Spring Boot的目的是提供一組工具,以便快速構建容易配置的Spring應用程式,省去大量傳統Spring專案的繁瑣配置。 MongoDB是一個基於分散式檔
Spring Boot 操作 Memcache
1 第4-1課:Spring Boot 操作 Memcache 《精通 Spring Boot 42 講》共分五大部分,第四部分主要講解 Spring Boot 和中介軟體的使用,共 10 課,中介軟體是網際網路公司支撐高併發業務的必備元件,常用的元件有快取、訊息中介軟體
Spring-Boot整合RabbitMQ
RabbitMQ 即一個訊息佇列,主要是用來實現應用程式的非同步和解耦,同時也能起到訊息緩衝,訊息分發的作用。 訊息中介軟體在網際網路公司的使用中越來越多,剛才還看到新聞阿里將RocketMQ捐獻給了apache,當然了今天的主角還是講RabbitMQ。訊息中介軟體最主
第九篇:Spring Boot整合RabbitMQ
RabbitMQ是一個開源的訊息代理和佇列伺服器,用來通過普通協議在完全不同的應用之間共享資料,或者簡單地將作業佇列以便讓分散式伺服器進行處理。訊息佇列使用訊息將應用程式連線起來,這些訊息通過像RabbitMQ這樣的訊息代理伺服器在應用程式之間路由。這篇文章將帶你瞭解怎麼整合Rabbit
Spring boot整合RabbitMQ的簡單使用
最近訊息佇列的使用比較頻繁,目前我使用比較多的就是RabbitMQ了,在專案中一般使用訊息佇列的場景有如下幾個地方。 1.非同步的處理:比如在註冊,或者專案中狀態改變需要給對應的角色傳送郵件,簡訊的時候。應該採用訊息佇列把事件放入佇列,讓傳送郵件的服務去做傳送的事件。 2
基於spring boot 2.x的websocket示例
/** * @author junmingyang */ public class DemoWebSocketClient { public static final String SEND_URL = GlobalConsts.APP_PREFIX + GlobalConsts.
Spring Boot整合RabbitMQ
訂閱程式 原始碼 @Bean public SimpleMessageListenerContainer customerMessageContainer() { SimpleMessage
php rabbitmq延遲佇列示例
<?php /** * Created by PhpStorm. * User: he * Date: 17-7-17 * Time: 下午5:38 */ namespace AcmeBundle\Service; use PhpAmq