1. 程式人生 > >activemq配置和專案中應用

activemq配置和專案中應用

伺服器ip

124.251.47.225,124.251.47.226,124.251.51.53

Zk路徑

/www/webdev/zookeeper-3.4.9


Zk啟動指令碼

/www/webdev/zookeeper-3.4.9/bin/zkServer.sh

 

釋出指令碼路徑

/www/webdev/heaboy

deploy-bpjk-qas.sh

 

activemq路徑

/www/activemq/apache-activemq-5.13.5

activemq配置檔案

/www/activemq/apache-activemq-5.13.5/conf/activemq.xml

需要配置225的叢集

Activemq啟動指令碼

/www/activemq/apache-activemq-5.13.5/bin/activemq

同步日誌檔案指令碼

在53伺服器上,將225,226的log日誌同步到53上

/backup/ Synchronizationlog.sh

檔案內容

sudo rsync -avz [email protected]::share_data /backup/226/log

sudo rsync -avz [email protected]::share_data /backup/225/log

sudo rsync -avz [email protected]::json_data /backup/json_data

sudo rsync -avz [email protected]::json_data /backup/json_data

環境配置

環境準備

工具

1.       JDK1.6或1.7

2.       Spring4.1.0

3.       ActiveMQ5.11.1

4.       Tomcat7.x

目錄結構

 

所需jar包

專案的配置

配置ConnectionFactory

connectionFactory是Spring用於建立到JMS伺服器連結的,Spring提供了多種connectionFactory,我們介紹兩個SingleConnectionFactory和CachingConnectionFactory。

SingleConnectionFactory:對於建立JMS伺服器連結的請求會一直返回同一個連結,並且會忽略Connection的close方法呼叫。

CachingConnectionFactory:繼承了SingleConnectionFactory,所以它擁有SingleConnectionFactory的所有功能,同時它還新增了快取功能,它可以快取Session、MessageProducer和MessageConsumer。我們使用CachingConnectionFactory來作為示例。

<beanid="connectionFactory"class="org.springframework.jms.connection.CachingConnectionFactory">

</bean>

Spring提供的ConnectionFactory只是Spring用於管理ConnectionFactory的,真正產生到JMS伺服器連結的ConnectionFactory還得是由JMS服務廠商提供,並且需要把它注入到Spring提供的ConnectionFactory中。我們這裡使用的是ActiveMQ實現的JMS,所以在我們這裡真正的可以產生Connection的就應該是由ActiveMQ提供的ConnectionFactory。所以定義一個ConnectionFactory的完整程式碼應該如下所示:

  <!-- ActiveMQ 連線工廠 -->

<!-- 真正可以產生ConnectionConnectionFactory,由對應的 JMS服務廠商提供-->

<!-- 如果連線網路:tcp://ip:61616;未連線網路:tcp://localhost:61616 以及使用者名稱,密碼-->

<amq:connectionFactoryid="amqConnectionFactory"

brokerURL="tcp://192.168.3.3:61616"userName="admin"password="admin"  />

<!-- Spring Caching連線工廠 -->

<!-- Spring用於管理真正的ConnectionFactoryConnectionFactory -->

<beanid="connectionFactory"class="org.springframework.jms.connection.CachingConnectionFactory">

<!-- 目標ConnectionFactory對應真實的可以產生JMS ConnectionConnectionFactory -->

<propertyname="targetConnectionFactory"ref="amqConnectionFactory"></property>

<!-- 同上,同理 -->

<!-- <constructor-arg ref="amqConnectionFactory" /> -->

<!-- Session快取數量 -->

<propertyname="sessionCacheSize"value="100" />

</bean>

 

配置生產者

配置好ConnectionFactory之後我們就需要配置生產者。生產者負責產生訊息併發送到JMS伺服器。但是我們要怎麼進行訊息傳送呢?通常是利用Spring為我們提供的JmsTemplate類來實現的,所以配置生產者其實最核心的就是配置訊息傳送的JmsTemplate。對於訊息傳送者而言,它在傳送訊息的時候要知道自己該往哪裡發,為此,我們在定義JmsTemplate的時候需要注入一個Spring提供的ConnectionFactory物件。

在利用JmsTemplate進行訊息傳送的時候,我們需要知道傳送哪種訊息型別:一個是點對點的ActiveMQQueue,另一個就是支援訂閱/釋出模式的ActiveMQTopic。如下所示:

<!-- Spring JmsTemplate 的訊息生產者 start-->

<!-- 定義JmsTemplateQueue型別 -->

<beanid="jmsQueueTemplate"class="org.springframework.jms.core.JmsTemplate">

<!-- 這個connectionFactory對應的是我們定義的Spring提供的那個ConnectionFactory物件 -->

<constructor-argref="connectionFactory" />

<!-- pub/sub模型(釋出/訂閱),即佇列模式 -->

<propertyname="pubSubDomain"value="false" />

</bean>

<!-- 定義JmsTemplateTopic型別 -->

<beanid="jmsTopicTemplate"class="org.springframework.jms.core.JmsTemplate">

<!-- 這個connectionFactory對應的是我們定義的Spring提供的那個ConnectionFactory物件 -->

<constructor-argref="connectionFactory" />

<!-- pub/sub模型(釋出/訂閱) -->

<propertyname="pubSubDomain"value="true" />

</bean>

<!--Spring JmsTemplate 的訊息生產者 end-->

 

生產者如何指定目的地和傳送訊息?大家看原始碼即可,就不再這提供了。

配置消費者

生產者往指定目的地Destination傳送訊息後,接下來就是消費者對指定目的地的訊息進行消費了。那麼消費者是如何知道有生產者傳送訊息到指定目的地Destination了呢?每個消費者對應每個目的地都需要有對應的MessageListenerContainer。對於訊息監聽容器而言,除了要知道監聽哪個目的地之外,還需要知道到哪裡去監聽,也就是說它還需要知道去監聽哪個JMS伺服器,通過配置MessageListenerContainer的時候往裡面注入一個ConnectionFactory來實現的。所以我們在配置一個MessageListenerContainer的時候有三個屬性必須指定:一個是表示從哪裡監聽的ConnectionFactory;一個是表示監聽什麼的Destination;一個是接收到訊息以後進行訊息處理的MessageListener。

<!-- 訊息消費者 start-->

<!-- 定義Queue監聽器 -->

<jms:listener-containerdestination-type="queue"container-type="default"connection-factory="connectionFactory"acknowledge="auto">

<jms:listenerdestination="test.queue"ref="queueReceiver1"/>

<jms:listenerdestination="test.queue"ref="queueReceiver2"/>

</jms:listener-container>

<!-- 定義Topic監聽器 -->

<jms:listener-containerdestination-type="topic"container-type="default"connection-factory="connectionFactory"acknowledge="auto">

<jms:listenerdestination="test.topic"ref="topicReceiver1"/>

<jms:listenerdestination="test.topic"ref="topicReceiver2"/>

</jms:listener-container>

<!-- 訊息消費者 end -->

 

111

ActiveMQ.xml

此時,Spring和JMS,ActiveMQ整合的ActiveMQ.xml已經完成,下面展示所有的xml

Web.xml

<?xmlversion="1.0" encoding="UTF-8"?>

<web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns="http://java.sun.com/xml/ns/javaee"xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"

version="3.0">

<display-name>ActiveMQSpringDemo</display-name>

<!-- Log4J Start -->

<context-param>

<param-name>log4jConfigLocation</param-name>

<param-value>classpath:log4j.properties</param-value>

</context-param>

<context-param>

<param-name>log4jRefreshInterval</param-name>

<param-value>6000</param-value>

</context-param>

<!-- Spring Log4J config -->

<listener>

<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>

</listener>

<!-- Log4J End -->

<!-- Spring 編碼過濾器 start -->

<filter>

<filter-name>characterEncoding</filter-name>

<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

<init-param>

<param-name>encoding</param-name>

<param-value>UTF-8</param-value>

</init-param>

<init-param>

<param-name>forceEncoding</param-name>

<param-value>true</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>characterEncoding</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

<!-- Spring 編碼過濾器 End -->

<!-- Spring Application Context Listener Start -->

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath*:applicationContext.xml,classpath*:ActiveMQ.xml</param-value>

</context-param>

<listener>

<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

<!-- Spring Application Context Listener End -->

<!-- Spring MVC Config Start -->

<servlet>

<servlet-name>SpringMVC</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<init-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:spring-mvc.xml</param-value>

</init-param>

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>SpringMVC</servlet-name>

<!-- Filter all resources -->

<url-pattern>/</url-pattern>

</servlet-mapping>

<!-- Spring MVC Config End -->

</web-app>

ActiveMQ.xml

   <?xml version="1.0" encoding="UTF-8"?>

<beansxmlns="http://www.springframework.org/schema/beans"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:amq="http://activemq.apache.org/schema/core"

xmlns:jms="http://www.springframework.org/schema/jms"

xsi:schemaLocation="http://www.springframework.org/schema/beans  

        http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  

        http://www.springframework.org/schema/context  

        http://www.springframework.org/schema/context/spring-context-4.0.xsd

        http://www.springframework.org/schema/jms

        http://www.springframework.org/schema/jms/spring-jms-4.0.xsd

        http://activemq.apache.org/schema/core

        http://activemq.apache.org/schema/core/activemq-core-5.8.0.xsd">

<!-- ActiveMQ 連線工廠 -->

<!-- 真正可以產生ConnectionConnectionFactory,由對應的 JMS服務廠商提供-->

<!-- 如果連線網路:tcp://ip:61616;未連線網路:tcp://localhost:61616 以及使用者名稱,密碼-->

<amq:connectionFactoryid="amqConnectionFactory"

brokerURL="tcp://192.168.3.3:61616"userName="admin"password="admin"  />

<!-- Spring Caching連線工廠 -->

<!-- Spring用於管理真正的ConnectionFactoryConnectionFactory -->

<beanid="connectionFactory"class="org.springframework.jms.connection.CachingConnectionFactory">

<!-- 目標ConnectionFactory對應真實的可以產生JMS ConnectionConnectionFactory -->

<propertyname="targetConnectionFactory"ref="amqConnectionFactory"></property>

<!-- 同上,同理 -->

<!-- <constructor-arg ref="amqConnectionFactory" /> -->

<!-- Session快取數量 -->

<propertyname="sessionCacheSize"value="100" />

</bean>

<!-- Spring JmsTemplate 的訊息生產者 start-->

<!-- 定義JmsTemplateQueue型別 -->

<beanid="jmsQueueTemplate"class="org.springframework.jms.core.JmsTemplate">

<!-- 這個connectionFactory對應的是我們定義的Spring提供的那個ConnectionFactory物件 -->

<constructor-argref="connectionFactory" />

<!-- pub/sub模型(釋出/訂閱),即佇列模式 -->

<propertyname="pubSubDomain"value="false" />

</bean>

<!-- 定義JmsTemplateTopic型別 -->

<beanid="jmsTopicTemplate"class="org.springframework.jms.core.JmsTemplate">

<!-- 這個connectionFactory對應的是我們定義的Spring提供的那個ConnectionFactory物件 -->

<constructor-argref="connectionFactory" />

<!-- pub/sub模型(釋出/訂閱) -->

<propertyname="pubSubDomain"value="true" />

</bean>

<!--Spring JmsTemplate 的訊息生產者 end-->

<!-- 訊息消費者 start-->

<!-- 定義Queue監聽器 -->

<jms:listener-containerdestination-type="queue"container-type="default"connection-factory="connectionFactory"acknowledge="auto">

<jms:listenerdestination="test.queue"ref="queueReceiver1"/>

<jms:listenerdestination="test.queue"ref="queueReceiver2"/>

</jms:listener-container>

<!-- 定義Topic監聽器 -->

<jms:listener-containerdestination-type="topic"container-type="default"connection-factory="connectionFactory"acknowledge="auto">

<jms:listenerdestination="test.topic"ref="topicReceiver1"/>

<jms:listenerdestination="test.topic"ref="topicReceiver2"/>

</jms:listener-container>

<!-- 訊息消費者 end -->

</beans>

 

相關推薦

activemq配置專案應用

伺服器ip 124.251.47.225,124.251.47.226,124.251.51.53 Zk路徑 /www/webdev/zookeeper-3.4.9 Zk啟動指令碼 /www/webdev/zookeeper-3.4.9/bin/zkServer.sh

SpringBoot專案應用Jedis一些常見配置

# 優雅的使用Jedis 部落格地址:https://www.cnblogs.com/keatsCoder/p/12609109.html 轉載請註明出處,謝謝 Redis的Java客戶端有很多,Jedis是其中使用比較廣泛和效能比較穩定的一個。並且其API和RedisAPI命名風格類似,推薦大家使用

log4j配置springbootLogback配置

log4j 1. 導包 log4j下載地址 2. 配置檔案 預設配置檔案在src目錄下,個人感覺用properties還是比較爽的,在src下新建log4j.properties檔案 注:日誌級別 (debug < info < warn < e

SharedPreferences在專案應用——開發記錄

開發記錄:在日常開發中,長使用的幾種本地序列化方式,SP的使用是最普遍的,所以對SP 的封裝就異常重要了,用起來順手的SP封裝工具,能夠節省你很多時間。 面試技能點 原生程式碼實現 工具類(只想要程式碼 Github 三個類直接貼到專案中就行了。) 枯燥的原理時間:

肯亞政府將在經濟適用房專案應用區塊鏈技術 明確入住居民身份防止腐敗

為了降低成本,肯亞政府計劃使用區塊鏈技術對50萬套經濟適用房進行分配和資金管理。 根據肯亞政府頒佈的“2018財政法(Finance Act 2018)”要求,最新啟動的經濟適用房建設專案將由該國國家住房基金提供資金支援,該基金的資金來源包括幾個方面,包括由本地企業和職工的薪資中貢獻3%,

26.如何在實際專案應用ROS導航相關(3)- 多點導航/巡航

前文 18.如何在實際專案中應用ROS導航相關(1)定點導航使用程式啟動一個pibot_simulator,並且完成一個定點導航,本文對其修改完成一個多點導航航的例子 直接貼出程式碼 navigation_multi_demo.launch <launch

淺談持續整合構建在網際網路軟體測試專案應用與分析·

一、引言 在網際網路資訊時代,隨著Internet的快速增長及Web應用的不斷髮展,使其快速滲透到商業、電子商務、軍事、工業、教育等領域和個人生活的各個方面,對我們的生活及工作產生了深遠的影響。在當今市場需求和Internet技術進步的不斷推動下,Web應用日益增加,網際網路的軟體規模不斷擴大,

activeMQ例項在專案的運用【專案實戰系列】

1.下載ActiveMQ 去官方網站下載:http://activemq.apache.org/ 2.執行ActiveMQ 解壓縮apache-activemq-5.14.0-bin.zip,然後雙擊apache-activemq-5.14.0\bin\activemq.

泛型在類介面應用

泛型就是變數型別的引數化。在使用泛型前,存入集合中的元素可以是任何型別的,當從集合中取出時,所有的元素都是Object型別,需要進行向下的強制型別轉換,轉換到特定的型別。而強制型別轉換容易引起執行時錯誤。 泛型型別引數只能被類或介面型別賦值,不能被原生

MySQL設定編碼專案如何統一編碼

資料庫、表、表字段、伺服器程式碼、伺服器檔案、瀏覽器顯示的編碼要統一。 建庫建表時指定編碼: 建立資料庫時指定庫編碼: create database databaseName default character set utf8 collate utf8

flask的session cookie 測試 專案的使用者狀態保持

測試程式碼 # -*- coding:utf-8 -*- # Author: json_steve from flask import Flask, current_app, make_resp

工作總結19 tomcat下的web.xml專案的web.xml

今天在部署專案的時候,如果我沒有在自己的專案配置web.xml的         <welcome-file-list> <welcome-file>/index.jsp<

【Android】RxJava2+Retrofit2+OkHttp3的基礎、封裝專案的使用

前言: 近些年很火的Retrofit+RxJava+OkHttp網路請求框架,功能強大,結構合理,使用簡單方便。後面還會給大家發自己整理過的Retrofit和RxJava、RxAndroid和RxBus。希望大家點一下關注,讓我這個懶癌患者有動力繼續寫下去! 本

activeMQ例項在專案的運用二【專案實戰系列】

        上一篇我們已經介紹了activeMQ的伺服器端的開發和程式碼,那麼這一篇就介紹一下怎麼獲取對應的activeMQ裡面的資訊,並 通過websocket推送到前端。         首先來看一下接收端專案結構: 專案結構中主要的就是listener包裡

java執行緒池在web專案應用

執行緒池 JANUARY 8,2016 遇到了問題 依稀還記得是15年初的時候,一些業務資料發生了錯誤,經過仔細分析,認為是重複發起了請求引起的,經過多方確認任務重複請求不是認為操作,分析程式發現程式也不會無緣無故發起二次請求。因為這個情況只發生過一次兩次,再加上仔細檢查程

Maven多模組專案應用maven-tomcat-plugin熱部署

我這個專案是用maven管理的一個多模組的專案,大概結構是 aaa      -Business      -Core      -Framework      -Web aaa是pom專案,Web是war專案,其它的是jar 一開始我是在Web裡面配置了tomcat的

使用性的單例模式,專案應用

實現階段進階:如果檢視書本上單例模式,簡單一句話,都是如何實現。 並且實現務必有 Class.GetInstance() 的語句。這種方式的缺點還一個就是程式碼的可讀性受影響; 原因區別於非單例的程式碼new Class(); 並且對於庫的引用者的視角需要明白單例一說。 那

centos下tomcat+mysql的配置專案部署

TOMCAT伺服器的配置  1. jre的安裝 1.1 檢視centos中原來自帶的JDK並解除安裝 1 [[email protected] home]# java -version|grep gcj  2 [[email protected

在spring boot專案應用swagger2

1.       在pom.xml中新增<dependency> <groupId>io.springfox</groupId> <artifactId&g

專案應用Redis+Php的場景

redis是一個開源的使用ANSI C語言編寫、支援網路、可基於記憶體亦可持久化的日誌型、Key-Value資料庫,並提供多種語言的API。今天我們來看下php結合redis的一些應用場景 前言 一些案例中有的同學說為什麼不可以用string型