solon 集成 activemq-client (sdk)

原始狀態的 activemq-client sdk 集成非常方便,也更適合定制。就是有些同學,可能對原始接口會比較陌生,會希望有個具體的示例。

<dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-client</artifactId><version>${activemq.version}</version>
</dependency><dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-pool</artifactId><version>${activemq.version}</version>
</dependency>

希望更加簡化使用的同學,可以使用:

activemq-solon-cloud-plugin (使用更簡單,定制性弱些)

1、添加集成配置

先使用 Solon 初始器 先生成一個 Solon Web 模板項目,然后添加上面的 activemq-client 依賴。再做個配置約定(也可按需定義):

  • “solon.activemq”,作為配置前綴
    • “properties”,作為公共配置
    • “producer”,作為生態者專屬配置(估計用不到)
    • “consumer”,作為消費者專屬配置(估計用不到)

具體的配置屬性,參考自:ActiveMQConnectionFactory

solon.app:name: "demo-app"group: "demo"# 配置可以自由定義,與 @Bean 代碼對應起來即可(以下為參考)
solon.activemq:properties:  #公共配置(配置項,參考:ActiveMQConnectionFactory)brokerURL: "failover:tcp://localhost:61616"redeliveryPolicy:initialRedeliveryDelay: 5000backOffMultiplier: 2useExponentialBackOff: truemaximumRedeliveries: -1maximumRedeliveryDelay: 3600_000

添加 java 配置器

@Configuration
public class ActivemqConfig {@Bean(destroyMethod = "stop")public Connection client(@Inject("${solon.activemq.properties}") Props common) throws Exception {String brokerURL = (String) common.remove("brokerURL");String userName = (String) common.remove("userName");String password = (String) common.remove("password");ActiveMQConnectionFactory factory;if (Utils.isEmpty(userName)) {factory = new ActiveMQConnectionFactory(brokerURL);} else {factory = new ActiveMQConnectionFactory(brokerURL, userName, password);}//綁定額外的配置并創建連接Connection connection = common.bindTo(factory).createConnection();connection.start();return connection;}@Beanpublic IProducer producer(Connection connection) throws Exception {return new IProducer(connection);}@Beanpublic void consumer(Connection connection,MessageListener messageListener) throws Exception {Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);Destination destination = session.createTopic("topic.test");MessageConsumer consumer = session.createConsumer(destination);consumer.setMessageListener(messageListener);}
}

activemq 的消息發送的代碼比較復雜,所以我們可以做個包裝處理(用于上面的配置構建),臨時命名為 IProducer:

public class IProducer {private Connection connection;public IProducer(Connection connection) {this.connection = connection;}public void send(String topic, MessageBuilder messageBuilder) throws JMSException {Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);Destination destination = session.createTopic(topic);MessageProducer producer = session.createProducer(destination);producer.send(destination, messageBuilder.build(session));}@FunctionalInterfacepublic static interface MessageBuilder {Message build(Session session) throws JMSException;}
}

3、代碼應用

發送(或生產),這里代控制器由用戶請求再發送消息(僅供參考):

@Controller
public class DemoController {@Injectprivate IProducer producer;@Mapping("/send")public void send(String msg) throws Exception {//發送producer.send("topic.test", s -> s.createTextMessage("test"));}
}

監聽(或消費),這里采用訂閱回調的方式:(僅供參考)

@Component
public class DemoMessageListener implements MessageListener {@Overridepublic void onMessage(Message message) {System.out.println(message);RunUtil.runAndTry(message::acknowledge);}
}

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

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

相關文章

2024 年最新前端ES-Module模塊化、webpack打包工具詳細教程(更新中)

模塊化概述 什么是模塊&#xff1f;模塊是一個封裝了特定功能的代碼塊&#xff0c;可以獨立開發、測試和維護。模塊通過導出&#xff08;export&#xff09;和導入&#xff08;import&#xff09;與其他模塊通信&#xff0c;保持內部細節的封裝。 前端 JavaScript 模塊化是指…

uni-app商品搜索頁面

目錄 一:功能概述 二:功能實現 一:功能概述 商品搜索頁面,可以根據商品品牌,商品分類,商品價格等信息實現商品搜索和列表展示。 二:功能實現 1:商品搜索數據 <view class="search-map padding-main bg-base"> <view class…

最小堆及添加元素操作

【小白從小學Python、C、Java】 【考研初試復試畢業設計】 【Python基礎AI數據分析】 最小堆及添加元素操作 [太陽]選擇題 以下代碼執行的結果為&#xff1f; import heapq heap [] heapq.heappush(heap, 5) heapq.heappush(heap, 3) heapq.heappush(heap, 2) heapq.…

10. 考勤信息

題目描述 公司用一個字符串來表示員工的出勤信息 absent:缺勤late: 遲到leaveearly: 早退present: 正常上班 現需根據員工出勤信息&#xff0c;判斷本次是否能獲得出勤獎&#xff0c;能獲得出勤獎的條件如下: 缺勤不超過一次&#xff0c;沒有連續的遲到/早退:任意連續7次考勤&a…

【計算機網絡】期末考試預習復習|中

作業講解 轉發器、網橋、路由器和網關(4-6) 作為中間設備&#xff0c;轉發器、網橋、路由器和網關有何區別&#xff1f; (1) 物理層使用的中間設備叫做轉發器(repeater)。 (2) 數據鏈路層使用的中間設備叫做網橋或橋接器(bridge)。 (3) 網絡層使用的中間設備叫做路…

前端工程化-Vue腳手架安裝

在現代前端開發中&#xff0c;Vue.js已成為一個流行的框架&#xff0c;而Vue CLI&#xff08;腳手架&#xff09;則為開發者提供了一個方便的工具&#xff0c;用于快速創建和管理Vue項目。本文將詳細介紹如何安裝Vue腳手架&#xff0c;創建新項目以及常見問題的解決方法。 什么…

利用爬蟲獲取的數據能否用于商業分析?

在數字化時代&#xff0c;數據已成為企業獲取競爭優勢的關鍵資源。網絡爬蟲作為一種數據收集工具&#xff0c;能夠從互聯網上抓取大量數據&#xff0c;這些數據在商業分析中扮演著重要角色。然而&#xff0c;使用爬蟲技術獲取的數據是否合法、能否用于商業分析&#xff0c;是許…

羅德與施瓦茨ZN-Z129E網絡分析儀校準套件具體參數

羅德與施瓦茨ZN-Z129E網絡校準件ZN-Z129E網絡分析儀校準套件 1&#xff0c;頻率范圍從9kHz到4GHz&#xff08;ZNB4&#xff09;,8.5GHz(ZNB8)&#xff0c;20GHz(ZNB20)&#xff0c;40GHz(ZNB40) 2&#xff0c;動態范圍寬&#xff0c;高達140 dB 3&#xff0c;掃描時間短達4ms…

如何為IntelliJ IDEA配置JVM參數

在使用IntelliJ IDEA進行Java開發時&#xff0c;合理配置JVM參數對于優化項目性能和資源管理至關重要。IntelliJ IDEA提供了兩種方便的方式來設置JVM參數&#xff0c;以確保你的應用程序能夠在最佳狀態下運行。本文將詳細介紹這兩種方法&#xff1a;通過工具欄編輯配置和通過服…

unity is running as administrator 管理員權限問題

每次打開工程彈出unity is running as administrator的窗口 unity版本2022.3.34f1&#xff0c;電腦系統是win 11系統解決方法一&#xff1a;解決方法二&#xff1a; unity版本2022.3.34f1&#xff0c;電腦系統是win 11系統 每次打開工程都會出現unity is running as administr…

回歸預測 | MATLAB實現CNN-BiGRU-Attention卷積神經網絡結合雙向門控循環單元融合注意力機制多輸入單輸出回歸預測

回歸預測 | MATLAB實現CNN-BiGRU-Attention卷積神經網絡結合雙向門控循環單元融合注意力機制多輸入單輸出回歸預測 目錄 回歸預測 | MATLAB實現CNN-BiGRU-Attention卷積神經網絡結合雙向門控循環單元融合注意力機制多輸入單輸出回歸預測預測效果基本介紹程序設計參考資料 預測效…

OneCode:開啟高效編程新時代——企業定制出碼手冊

一、概述 OneCode 的 DSM&#xff08;領域特定建模&#xff09;出碼模塊是一個強大的工具&#xff0c;它支持多種建模方式&#xff0c;并具有強大的模型轉換與集成能力&#xff0c;能夠提升開發效率和代碼質量&#xff0c;同時方便團隊協作與知識傳承&#xff0c;還具備方便的仿…

git暫存

給大家分享幾個git命令&#xff1a; git stash 暫存工作目錄的修改 git stash list 查看暫存列表 git stash apply 恢復暫存內容并保持最近一次暫存記錄&#xff0c;如果有多個暫存記錄&#xff0c;想恢復指定的暫存記錄&#xff0c;可以使用git stash apply stash{}&#xf…

遠程控制軟件新趨勢

隨著數字化浪潮的推進&#xff0c;遠程控制軟件已經成為我們生活中的一部分&#xff0c;它們不僅改變了我們的工作方式&#xff0c;還為日常生活帶來了極大的便利。現在&#xff0c;讓我們來探討遠程控制軟件在數字時代的發展和應用&#xff0c;以及它們如何引領新的辦公趨勢。…

C++如何處理對象的狀態變化?

概念 處理對象的狀態變化是軟件開發中一個重要的課題&#xff0c;尤其是在設計過程中&#xff0c;如何有效管理對象的狀態變化對于軟件的可維護性、可擴展性和整體設計都至關重要。 狀態模式 狀態模式通過將狀態封裝為對象&#xff0c;允許對象在內部狀態改變時改變其行為。…

在Spring中application 的配置屬性(詳細)

application 的配置屬性。 這些屬性是否生效取決于對應的組件是否聲明為 Spring 應用程序上下文里的 Bean &#xff08;基本是自動配置 的&#xff09;&#xff0c;為一個不生效的組件設置屬性是沒有用的。 multipart multipart.enabled 開啟上傳支持&#xff08;默認&a…

C語言編程1.27漢諾塔

題目描述 給定一個由n個圓盤組成的塔&#xff0c;這些圓盤按照大小遞減的方式套在第一根樁柱上。現要將整個塔移動到另一根樁柱上&#xff0c;每次只能移動一個圓盤&#xff0c;且較大的圓盤在移動過程中不能放置在較小的圓盤上面。 輸入格式 輸入由四行&#xff1a; 第一行…

初學stm32 --- 時鐘配置

目錄 stm32時鐘系統 時鐘源 &#xff08;1&#xff09; 2 個外部時鐘源&#xff1a; &#xff08;2&#xff09;2 個內部時鐘源&#xff1a; 鎖相環 PLL PLLXTPRE&#xff1a; HSE 分頻器作為 PLL 輸入 (HSE divider for PLL entry) PLLSRC&#xff1a; PLL 輸入時鐘源 (PL…

【Java基礎面試題025】什么是Java的Integer緩存池?

回答重點 Java的Integer緩存池&#xff08;Integer Cache&#xff09;是為了提升性能和節省內存。根據實踐發現大部分的數據操作都集中在值比較小的范圍&#xff0c;因此緩存這些對象可以減少內存分配和垃圾回收的負擔&#xff0c;提升性能 在 -128到127范圍內的Integer對象會…

Nginx IP優化限制策略

Nginx 如何限制每個 IP 地址的連接數&#xff0c;優化資源分配&#xff1f; Nginx 限制每個 IP 地址的連接數 Nginx 提供了多種機制來限制單個 IP 地址所能建立的同時連接數&#xff0c;這對于防止資源耗盡和提高服務穩定性至關重要。以下是幾種有效策略&#xff1a; 1. 使用…