摘要:嵌入在一些項目中,多帶帶開啟一個,對于項目實施來說有時略顯繁瑣。待啟動后,選擇所在的進程。連接后選擇頁簽紅框的地方分別為已消費和已進入中的消息的條數。
ActiveMQ 嵌入Tomcat
在一些項目中,多帶帶開啟一個ActiveMQ,對于項目實施來說有時略顯繁瑣。所以我們將ActiveMQ內嵌到Tomcat,Tomcat啟動同時就順帶啟動了ActiveMQ。由此我們需要掌握三個個重要的知識點
ActiveMQ中的BrokerService
自啟動Servlet配置
使用jconsole了解嵌入ActiveMQ運行狀態
一、開啟BrokerService在pom.xml添加ActiveMQ依賴,本次代碼實例采用5.7版本,記住只需要activemq-core就行。
org.apache.activemq activemq-core 5.7.0
在編寫BrokerService代碼部分,主要注意三個點
是否需要在jconsole中顯示監控信息 broker.setUseJmx(true)
設置連接用戶名和密碼,如何使用驗證插件
是否持久化,存儲位置設置,持久化配置
所以需要啟動一個連接地址 tcp://localhost:61616,用戶名為admin,密碼為admin,需要持久化,持久化數據文件存儲地址為 /activemq ,需要啟動jconsole監控的BrokerService的代碼如下:
// author:herbert qq:464884492 BrokerService broker = new BrokerService(); broker.setUseJmx(true); // 開啟監控 broker.setPersistent(true); // 持久化 broker.setBrokerName("Test"); SimpleAuthenticationPlugin sap = new SimpleAuthenticationPlugin(); AuthenticationUser au = new AuthenticationUser("admin", "admin","users"); ArrayList二、生產者和消費者d = new ArrayList (); d.add(au); sap.setUsers(d); // 用戶驗證 broker.setPlugins(new BrokerPlugin[] { sap }); String mqDataPath = "/activemq"; // 存儲位置 broker.getPersistenceAdapter().setDirectory(new File(mqDataPath)); broker.addConnector("tcp://localhost:61616"); // 連接地址 broker.start();
ActiveMQ中,通用的消息傳遞方式有兩種
隊列,支持消息持久化,未消費的消息,在重啟后依然存在。若有多個消費者,在每次提取一條消息的前提下,所有消費均分隊列中的消息
主題,不支持消息持久化,未消費的消息,在重啟后消息丟失。若有多個消費,每個消費者依次消費主題中所有消息
不管是生產者還是消費者代碼編寫,主要是4個步驟
建立連接,采用failover:()方式,自動斷線重連
建立Session,獲取發送或接收目標Destination ,指定是隊列(session.createQueue(queueName)),還是主題(session.createTopic(topicName))
通過Session獲取生產者或消費者
生產或消費消息
我們現在編寫一個生產者的代碼,并循環產生10條消息
// author:herbert qq:464884492 String mqConnUrl = "tcp://localhost:61616"; String connUrl = "failover:(" + mqConnUrl.trim()+ ")?initialReconnectDelay=1000&maxReconnectDelay=30000"; ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("admin","admin", connUrl); javax.jms.Connection connection = connectionFactory.createConnection(); connection.start(); Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE); Destination destination = session.createQueue("system"); MessageProducer messageProducer = session.createProducer(destination); for (int i = 0; i < 10; i++) { javax.jms.TextMessage message = session.createTextMessage("ActiveMQ 發送的消息" + i); System.out.println("發送消息:" + "ActiveMQ 發送的消息" + i); messageProducer.send(message); }
編寫一個消費,消費上邊的10條消息
// author:herbert qq:464884492 String mqConnUrl = "tcp://localhost:61616"; String connUrl = "failover:(" + mqConnUrl.trim()+ ")?initialReconnectDelay=1000&maxReconnectDelay=30000"; ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("admin", "admin", connUrl); javax.jms.Connection connection = connectionFactory.createConnection(); connection.start(); Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE); Destination destination = session.createQueue("system"); MessageConsumer messageConsumer = session.createConsumer(destination); messageConsumer.setMessageListener(new MessageListener() { @Override public void onMessage(javax.jms.Message message) { ActiveMQTextMessage m = (ActiveMQTextMessage) message; try { System.out.println("接收到:" + m.getText()); } catch (JMSException e) { e.printStackTrace(); } } });
運行效果
可見,我們生產者,產生的10條消息,已成功被消費者處理了。
三、監控嵌入的ActiveMQ對于嵌入的ActiveMQ,在BrokerService啟動前需要設置 broker.setUseJmx(true);然后找到你的JAVA_HOME,切換到bin,輸入jconsole命令。
待jconsole啟動后,選擇ActiveMQ所在的進程。連接后選擇Mbean頁簽
紅框的地方分別為已消費和已進入MQ中的消息的條數。選擇操作,找到那個SendTextMessage還可以想此隊列發送消息。
四、Selvelt跟隨Tomcat啟動對于Tomcat7.x版本之后Tomcat,Selvelt都可以通過直接在代碼中通過注解的方式配置URl連接,一起是否自啟動loadOnStartup 這個值>=0表示需要自啟動,值越小優先級越高
// author:herbert qq:464884492 @WebServlet(urlPatterns = "/initmq", loadOnStartup = 1) public class InitMqServlet extends HttpServlet { @Override public void init(ServletConfig config) throws ServletException { super.init(config); // 這里編寫啟動ActiveMQ代碼 } }五、總結
這次以ActiveMQ作為消息隊列使用切入點,總體上說還比較順利。其中唯一出現問題的地方就是對于activeMQ依賴過多,多依賴了jaractivemq-broker,導致消息能連接,但不能發送消息。后邊直接換成 activemq-all,有出現slf4j日志沖突,使用exclusions依然不能解決問題。最終只依賴 activemq-core,完美解決所有問題。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/76600.html
摘要:第步配置環境變量在中使用即可,不用寫第步輸入進入中,輸入檢驗是否安裝成功。安裝服務啟動服務停止服務切換到目錄下運行參考安裝解壓,配置環境變量,下開啟和關閉窗口方式啟動安裝服務啟動協助服務命令校驗是否啟動輸入參考 1.安裝jdk 第1步:在官網下載和自己電腦位數相同的安裝包 第2步:選擇安裝路徑,默認在C盤,建議自定義選擇其他盤符,避免c盤重裝系統后,需要重新安裝。 第3步:安裝過程中...
摘要:構建系統強烈建議你選擇一個支持依賴管理的構建系統,并且可以使用發布到中心存儲庫的工件。例如,要升級到另一個,你可以將以下元素添加到你的在前面的示例中,我們指定了一個,但是任何依賴類型都可以以相同的方式被覆蓋。 13. 構建系統 強烈建議你選擇一個支持依賴管理的構建系統,并且可以使用發布到Maven中心存儲庫的工件。我們建議你選擇Maven或Gradle,可以讓Spring Boot與其...
摘要:不同的應用場景,不同的架構,不同的需求,都會對優化設置有不同要求。在這里我所記述的只是我自己在一些應用中所設置的優化項,以備不時之需,并不是放之四海而皆準的準則。為了消除這些警告,還需要根治。 一千個人眼中就有一千個哈姆雷特。——偽西方諺語 關于Tomcat的優化點之多,我估計沒有上萬,也有成千。不同的應用場景,不同的架構,不同的需求,都會對優化設置有不同要求。在這里我所記述的只是我...
摘要:還自動配置發送和接收消息所需的基礎設施。支持是一個輕量級的可靠的可伸縮的可移植的消息代理,基于協議,使用通過協議進行通信。 32. 消息傳遞 Spring框架為與消息傳遞系統集成提供了廣泛的支持,從使用JmsTemplate簡化的JMS API到使用完整的基礎設施異步接收消息,Spring AMQP為高級消息隊列協議提供了類似的特性集。Spring Boot還為RabbitTempla...
閱讀 725·2021-10-14 09:42
閱讀 1977·2021-09-22 15:04
閱讀 1585·2019-08-30 12:44
閱讀 2147·2019-08-29 13:29
閱讀 2740·2019-08-29 12:51
閱讀 557·2019-08-26 18:18
閱讀 709·2019-08-26 13:43
閱讀 2821·2019-08-26 13:38