項目實戰 — 消息隊列(9){編寫demo程序}

消息隊列服務器核心功能就是,提供了虛擬主機,交換機, 隊列,消息等概念的管理,實現三種典型的消息轉發方式,可以實現跨主機/服務器之間的生產者消費模型。

這里,就編寫一個demo,實現跨主機的生產者消費者模型。

🍅 完善服務器的啟動類

@SpringBootApplication
public class TigerMqApplication {public static ConfigurableApplicationContext context;public static void main(String[] args) throws IOException {context = SpringApplication.run(TigerMqApplication.class, args);BrokerServer brokerServer = new BrokerServer(9090);brokerServer.start();}
}

🍅 創建Demo程序

?

/*
* 表示一個生產者
* */
public class DemoProducer {public static void main(String[] args) throws IOException, InterruptedException {System.out.println("啟動生產者");ConnectionFactory factory = new ConnectionFactory();factory.setHost("127.0.0.1");factory.setPort(9090);Connection connection = factory.newConnection();Channel channel = connection.createChannel();//        創建交換機和隊列channel.exchangeDeclare("testExchange", ExchangeType.DIRECT,true,false,null );channel.queueDeclare("testQueue",true,false,false,null);//        創建一個消息并且發送byte[] body = "hello,TigerMQ".getBytes();boolean ok = channel.basicPublish("testExchange","testQueue",null,body);System.out.println("消息投遞完成!ok = " + ok);Thread.sleep(500);channel.close();connection.close();}
}

/*
* 表示一個消費者
* */
public class DemoConsumer {public static void main(String[] args) throws IOException, MqException, InterruptedException {System.out.println("啟動消費者!");ConnectionFactory factory = new ConnectionFactory();factory.setHost("127.0.0.1");factory.setPort(9090);Connection connection = factory.newConnection();Channel channel = connection.createChannel();channel.exchangeDeclare("testExchange", ExchangeType.DIRECT,true,false,null);channel.queueDeclare("testQueue",true,false,false,null);channel.basicConsume("testQueue", true, new Consumer() {@Overridepublic void handleDelivery(String consumerTag, BasicProperties basicProperties, byte[] body) throws MqException, IOException {System.out.println("[消費數據]開始!");System.out.println("consumerTag = " + consumerTag);System.out.println("basicProperties = " + basicProperties);String bodyString = new String(body,0, body.length);System.out.println("body = " + bodyString);System.out.println("[消費數據]結束!");}});//     一直等待消費while (true){Thread.sleep(500);}}
}

🍅 啟動服務器和客戶端程序

啟動服務器

?啟動生產者和消費者

啟動生產者
[Connection] 發送請求! type=1, length=188
[Connection] 收到響應! type=1, length=192
[Connection] 發送請求! type=3, length=512
[Connection] 收到響應! type=3, length=192
[Connection] 發送請求! type=5, length=349
[Connection] 收到響應! type=5, length=192
[Connection] 發送請求! type=9, length=437
[Connection] 收到響應! type=9, length=192
消息投遞完成!ok = true
[Connection] 發送請求! type=2, length=188
[Connection] 收到響應! type=2, length=192
[Connection] 連接正常斷開!Process finished with exit code 0
啟動消費者!
[Connection] 發送請求! type=1, length=188
[Connection] 收到響應! type=1, length=192
[Connection] 發送請求! type=3, length=512
[Connection] 收到響應! type=3, length=192
[Connection] 發送請求! type=5, length=349
[Connection] 收到響應! type=5, length=192
[Connection] 發送請求! type=10, length=315
[Connection] 收到響應! type=10, length=192
[Connection] 收到響應! type=12, length=528
[消費數據]開始!
consumerTag = C-4e9d5324-c197-462a-a0a5-31ffe3bf929a
basicProperties = BasicProperties(messageId=M-69e805c0-8298-4e8f-b737-001c340e18d5, routingKey=testQueue, deliverMode=1)
body = hello,TigerMQ
[消費數據]結束!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/35384.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/35384.shtml
英文地址,請注明出處:http://en.pswp.cn/news/35384.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【實戰講解】數據血緣落地實施

?在復雜的社會分工協作體系中,我們需要明確個人定位,才能更好的發揮價值,數據也是一樣,于是,數據血緣應運而生。 今天這篇文章會全方位的講解數據血緣,并且給出具體的落地實施方案。 一、數據血緣是什么…

JAVA多線程和并發基礎面試問答(翻譯)

JAVA多線程和并發基礎面試問答(翻譯) java多線程面試問題 1. 進程和線程之間有什么不同? 一個進程是一個獨立(self contained)的運行環境,它可以被看作一個程序或者一個應用。而線程是在進程中執行的一個任務。Java運行環境是一個包含了不同的類和程序…

蘇州OV泛域名RSA加密算法https

RSA加密算法是一種非對稱加密算法,它被廣泛應用于信息安全領域。與對稱加密算法不同,RSA加密算法使用了兩個密鑰,一個公鑰和一個私鑰。公鑰可以公開,任何人都可以使用它加密信息,但只有私鑰的持有者才能解密信息。RSA加…

php如何對接偽原創api

在了解偽原創api的各種應用形態之后,我們繼續探討智能寫作背后的核心技術。需要說明的是,智能寫作和自然語言生成、自然語言理解、知識圖譜、多模算法等各類人工智能算法都有緊密的關聯,在百度的智能寫作實踐中,常根據實際需求將多…

全球勞動力革命,Papaya Global 打破薪資界限

員工需求和勞動力結構的進一步變化,只會增加對更加自動化和全面的全球薪資解決方案的需求。 遠程工作潮流與全球勞動力的蓬勃發展,使得企業在全球范圍內,尋找最優秀的人才成為可能。然而,隨之而來的復雜薪資管理挑戰,也…

優雅地處理RabbitMQ中的消息丟失

目錄 一、異常處理 二、消息重試機制 三、錯誤日志記錄 四、死信隊列 五、監控與告警 優雅地處理RabbitMQ中的消息丟失對于構建可靠的消息系統至關重要。下面將介紹一些優雅處理消息丟失的方案,包括異常處理、重試機制、錯誤日志記錄、死信隊列和監控告警等。…

BUUCTF題目Web部分wp(持續更新)

關于SQL注入的一些通用辦法 可以訪問哪些表 如有權限,查詢當前用戶可以訪問的所有表 --Oracle查詢當前用戶可訪問的所有表 select owner, table_name from all_tables order by table_name; --MySQL查詢用戶可訪問的所有數據庫和表 select table_sche…

爬蟲017_urllib庫_get請求的quote方法_urlencode方法_---python工作筆記036

按行來看get請求方式 比如這個地址 上面這個地址復制粘貼過來以后 可以看到周杰倫變成了一堆的Unicode編碼了 所以這個時候我們看,我們說https這里,用了UA反爬,所以這里 我們構建一個自定義的Request對象,里面要包含Us

電腦mfc140u.dll丟失的怎么辦呢?這個方法親測可以解決

修復mfc140u.dll是我最近遇到的一個技術問題,雖然在解決過程中遇到了一些困難,但最終的成功修復讓我對技術的力量有了更深的體會。 首先,我想談談遇到問題時的困惑。當我嘗試運行一個應用程序時,突然彈出一個錯誤提示,…

Docker Dirtypipe(CVE-2022-0847)漏洞復現與分析容器逃逸

安裝環境 ./metarget cnv install cve-2022-0847 --verbose 原理 同臟牛,通過寫只讀內存,對映射的內存做篡改 EXP docker run --rm -it -v $(pwd):/exp --cap-addCAP_DAC_READ_SEARCH ubuntu如果提示 Unknown capability to add: "CAP_CAP_DAC_RE…

第五十二天

HTML5 ●MathML 是數學標記語言,是一種基于XML(標準通用標記語言的子集)的標準,用來在互聯網上書寫數學符號和公式的置標語言。 ●拖放 拖放是一種常見的特性,即抓取對象以后拖到另一個位置。 在 HTML5 中&#xf…

YAMLException: java.nio.charset.MalformedInputException: Input length = 1

springboot項目啟動的時候提示這個錯誤:YAMLException: java.nio.charset.MalformedInputException: Input length 1 根據異常信息提示,是YAML文件有問題。 原因是yml配置文件的編碼有問題。 需要修改項目的編碼格式,一般統一為UTF-8。 或…

分別用python和go語言來實現的風靡一時的2048 游戲,包含完整代碼

目錄 1、Python實現2、Go實現 2048 游戲實現主要包括以下幾個步驟: 創建一個棋盤,通常使用二維列表表示。實現棋子的移動規則,左移、右移、上移、下移。判斷游戲是否結束,即棋盤是否已滿或者無空位可移動。實現游戲界面的顯示。 …

【Android】ViewBinding+DataBinding+MVVM新手快速上手

為什么寫這篇博客 網上大部分博客,代碼量都比較大,把實際的業務都代入進去了 這篇博客的目的,就是為了講解基本原理和使用思路,然后給出一個最簡單的Demo 這里不講解具體用法,那樣篇幅會太長,直接看Demo…

TENNECO EDI 項目——X12與XML之間的轉換

近期為了幫助廣大用戶更好地使用 EDI 系統,我們根據以往的項目實施經驗,將成熟的 EDI 項目進行開源。用戶安裝好知行之橋EDI系統之后,只需要下載我們整理好的示例代碼,并放置在知行之橋指定的工作區中,即可開始使用。 …

YOLOv5入門實踐(3)— 手把手教你如何去劃分數據集

前言:Hello大家好,我是小哥談。數據集標注完成之后,下一步就是對這些數據集進行劃分了。面對繁雜的數據集,如果手動劃分的話,不僅麻煩而且不能保持隨機性。本節課就給大家介紹一種方法,即使用代碼去劃分數據…

Xcode升級導致關聯庫報錯

想辦法找到對應的庫 然后到 Build Phases -- LinkBinary With Libraries中點擊,選擇對應的framework即可,就像我工程的報錯 Undefined symbol: _OBJC_CLASS_$_ADClient _OBJC_CLASS_$_ASIdentifierManager 缺失的庫是AdSupport.framework 添加后再次編…

Elasticsearch6.x和7.x的區別

Elasticsearch6.x和7.x的區別 1、查找方面的區別 在增刪改方面,6.x和7.x是一樣的,在查找方面(分為普通查找和有高亮的查找),6.x和7.x有區別。 在7.x的es中: org.springframework.data.elasticsearch.cor…

Styled-components,另一種css in js的方案

介紹 Styled-components是一種流行的CSS-in-JS庫,它為React和React Native應用程序提供了一種優雅的方式來管理組件的樣式。它的設計理念是將CSS樣式與組件邏輯緊密綁定在一起,從而使樣式在組件層級中作用更加清晰和可維護 使用 安裝Styled-components…

【C語言】操作符詳解

目錄 一、算數操作符 二、移位操作符 1.左移操作符 2.右移操作符 (1) 邏輯右移 (2) 算術右移 (3)小總結 三、位操作符 四、賦值操作符 五、單目操作符 六、關系操作符 七、邏輯操作符 八、 條件操作符 九、逗號表達式 十、下標引用、函數調用和結構成員 1. [ ]下…