1. 程式人生 > >activeMQ例項在專案中的運用二【專案實戰系列】

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

        上一篇我們已經介紹了activeMQ的伺服器端的開發和程式碼,那麼這一篇就介紹一下怎麼獲取對應的activeMQ裡面的資訊,並

通過websocket推送到前端。

        首先來看一下接收端專案結構:


專案結構中主要的就是listener包裡面的內容,用於監聽MQ中的訊息,我們來看其中一個UserPushListener.java類:

package com.lwl.activemq.listener;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;

import com.alibaba.fastjson.JSON;
import com.lwl.activemq.domain.User;
import com.lwl.activemq.controller.websocket.WebsocketController;

@Component("userPushListener")
public class UserPushListener implements MessageListener {
	 protected static final Logger logger = Logger.getLogger(UserPushListener.class);
	@Override
	public void onMessage(Message message) {
		 logger.info("[UserPushListener.onMessage]:begin onMessage.");
	        TextMessage textMessage = (TextMessage) message;
	        try {
	        	//獲取資料
	            String jsonStr = textMessage.getText();
	            logger.info("[UserPushListener.onMessage]:receive message is,"+ jsonStr);
	            if (jsonStr != null) {
	                User info = JSON.parseObject(jsonStr, User.class);
	                System.out.println("==============================接受到的使用者資訊 開始====================================");
	                System.out.println(info.toString());
	                System.out.println("==============================接受到的使用者資訊 結束====================================");
	                WebsocketController.broadcast("user", jsonStr);
	            }
	        } catch (JMSException e) {
	            logger.error("[UserPushListener.onMessage]:receive message occured an exception",e);
	        }
	        logger.info("[UserPushListener.onMessage]:end onMessage.");
	    }
}
其餘的2個和這個很相似,只是換了實體類的接收而已。

還記得我們在配置伺服器端使用的MQ的配置檔案嘛,當然在接收端也會使用相應的配置檔案:activemq_config.xml

<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"  
    xmlns:jms="http://www.springframework.org/schema/jms"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans  
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
     http://www.springframework.org/schema/context  
     http://www.springframework.org/schema/context/spring-context-3.0.xsd  
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
    http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-3.0.xsd">  
     
    <!-- 內部統一使用的MQ地址 -->
    <bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
        <property name="brokerURL" value="tcp://localhost:61616"/>
    </bean>
    <bean id="connectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory" destroy-method="stop">  
        <property name="connectionFactory" ref="targetConnectionFactory"/>  
        <property name="maxConnections" value="50"/>
    </bean>
    <!-- Spring提供的JMS工具類,它可以進行訊息傳送、接收等 -->
    <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">  
        <property name="connectionFactory" ref="connectionFactory"/>
    </bean>

   <!-- 推送給使用者資訊 -->
	<bean id="userPushListenerMQ" class="org.apache.activemq.command.ActiveMQQueue">
		<constructor-arg>
			<value>user.service.queue</value>
		</constructor-arg>
	</bean>
	<!-- 推送給新聞資訊 -->
	<bean id="newsPushListenerMQ" class="org.apache.activemq.command.ActiveMQQueue">
		<constructor-arg>
			<value>news.service.queue</value>
		</constructor-arg>
	</bean>
	<!-- 推送給客戶資訊 -->
	<bean id="clientPushListenerMQ" class="org.apache.activemq.command.ActiveMQQueue">
		<constructor-arg>
			<value>client.service.queue</value>
		</constructor-arg>
	</bean>
	
	<!-- 使用者接受推送 -->
    <bean id="userPushListenerConsumer"
          class="org.springframework.jms.listener.DefaultMessageListenerContainer">
        <property name="connectionFactory" ref="connectionFactory" />
        <property name="destination" ref="userPushListenerMQ" />
        <property name="messageListener" ref="userPushListener" />
    </bean>
    
	<!-- 新聞接受推送 -->
    <bean id="newsPushListenerConsumer"
          class="org.springframework.jms.listener.DefaultMessageListenerContainer">
        <property name="connectionFactory" ref="connectionFactory" />
        <property name="destination" ref="newsPushListenerMQ" />
        <property name="messageListener" ref="newsPushListener" />
    </bean>
    
	<!-- 客戶接受推送 -->
    <bean id="clientPushListenerConsumer"
          class="org.springframework.jms.listener.DefaultMessageListenerContainer">
        <property name="connectionFactory" ref="connectionFactory" />
        <property name="destination" ref="clientPushListenerMQ" />
        <property name="messageListener" ref="clientPushListener" />
    </bean>
</beans>

好了,資料接受端已經全部搞定了,就這麼簡單,沒什麼難度的。至於通過websocket推送到前端的功能,已經在我另一篇的

文章裡了:http://blog.csdn.net/lovelong8808/article/details/52212566 有興趣的可以看看,這2個是同一個專案使用,重在結合

知識和運用。

ActiveMQ的相關程式碼也已經提交到github上,有興趣的同學可以去看看 https://github.com/1181888200/activeMQ.git

相關推薦

activeMQ例項專案運用專案實戰系列

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

如何在你的專案整合 CAP手把手視訊教程

前言 之前錄製過一期關於CAP的視訊,但是由於當時是直播時錄製的視訊,背景音比較雜所以質量有點差。這次的視訊沒有直播,直接錄製的,視訊質量會好很多,第一遍錄製完成之後發現播放到一半沒有聲音,所以又重新錄製了一遍。 視訊簡介 CAP 2.3 版本釋出後,針對於一些介面做了一些調整,內部也做了很多修改,這一期的視

演算法實戰系列之兩數相加

給出兩個 非空 的連結串列用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。 如果,我們將這兩個數相加起來,則會返回一個新的連結串列來表示它們的和。 您可以假設除了數

OpenStack實戰系列OpenStack部署都有哪些方式

對於每一個剛接觸到OpenStack的新人而言,安裝無疑是最困難的,同時這也客觀上提高了大家學習OpenStack雲端計算的技術門檻。想一想,自己3年前網上偶然接觸到OpenStack時,一頭茫然,手動搭建一個多節點環境時居然用了3個星期。時至今日,真是感觸頗多

activeMQ例項專案運用專案實戰系列

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

備忘Lucene從入門到專案運用視訊

01_lucenc簡介和建立索引初步.avi 02_lucene簡介和搜尋初步.avi 03_lucene索引_建立_域選項.avi 04_lucene索引_的刪除和更新.avi 05_lucene索引_加權操作和Luke的簡單演示.avi  06_對日期和數字進行索引.av

springboot如何在自己的springboot專案引用別的springboot專案jar

正好今天碰到了,就在這裡總結下,習慣了將公用的專案打包成jar,然後當做工具類引入到自己專案中,直接呼叫,感覺甚是方便... 但有沒有發現,平時我們引用的大部分情況下是一個maven專案,然後打包好的jar也是maven專案的結構,所以我們可以正常的引用和使用,但現在已經是springboot的

怎樣實際專案運用責任鏈模式

1 模式概要 1.1 簡介 責任鏈模式為請求建立一個接收者物件鏈,每個接收者都包含對另一個接收者的引用,如果一個物件不能處理該請求,那麼它會把請求傳給下一個接收者,依此類推 責任鏈模式避免了請求的傳送者和接收者耦合在一起,讓多個物件都有可能接收請求,將這些物件連成一條鏈,並且沿著這條鏈傳遞請

專案運用rabbitmq

本章內容 解耦思維 例項解析 實現RPC功能        在專案開發中,我們談論最多的應該就是專案的可擴充套件性,解耦專案中的各模組就是解決擴充套件性的一種實現方式。為什麼要解耦?什麼樣的場景需要解耦呢? 解耦思維 &n

實際專案運用責任鏈模式 | 併發程式設計網

1 模式概要 1.1 簡介 責任鏈模式為請求建立一個接收者物件鏈,每個接收者都包含對另一個接收者的引用,如果一個物件不能處理該請求,那麼它會把請求傳給下一個接收者,依此類推 責任鏈模式避免了請求的傳送者和接收者耦合在一起,讓多個物件都有可能接收請求,將這些物件連成一條鏈,並且沿著這條鏈傳遞請

Java Websocket例項專案實戰系列

現很多網站為了實現即時通訊,所用的技術都是輪詢(polling)。輪詢是在特定的的時間間隔(如每1秒),由瀏覽器對伺服器發 出HTTP request,然後由伺服器返回最新的資料給客服端的瀏覽器。這種傳統的HTTP request 的模式帶來很明顯的缺點 – 瀏 覽器需要

javaweb專案退出系統親測

    // 退出登入重定向到登入頁面     @RequestMapping("/logout")     public String logout(HttpSession session) { //&nb

Vue專案生成維碼

本來是由後臺生成二維碼的,但是測試後不是很穩定,由於網路問題有時候會載入不過來。。。 之後就發現vue的兩個外掛:vue-qart和vue-qr。對比之後發現,vue-qr的配置更全一些,所以選擇了vue-qr vue-qart: 1、npm install vue-qart&nbs

Laravel專案運用Travis持續整合和自動化測試

背景 在很多Github開源專案頁面的readme中,經常看到類似的圖示 這個 bulid passing,其實是 Travis 的構建狀態圖示。Travis 是一個結合 Github 使用的持續整合(CI:continuous integration)

ASP.NET 系列淺談緩存技術在ASP.NET運用

進行 喜歡 之間 framework cnblogs 磁盤 onf lin bug 本篇文章雖不談架構,但是Cache又是架構中不可或缺的部分,因此,在講解Cache的同時,將會提及到部分架構知識,關於架構部分,讀者可以不用理解,或者直接跳過涉及架構部分的內容, 你只

Java Spring MVC專案搭建()——專案配置

文章轉載自:https://www.cnblogs.com/eczhou/p/6287876.html 1、站點配置檔案web.xml 每一個Spring MVC 專案都必須有一個站點配置檔案web.xml,他的主要功能嗎....有一位大哥已經整理的很好,我借來了,大家看看: 引用部落格

Spring Cloud 系列:構建Eureka Client 專案

一. 構建 Eureka Client 端   1. 首先還是需要先看看官方文件是如何說明的,從文件中瞭解到,需要為專案引入Eureka-client 相關jar包 <dependency> <groupId>org.springframew

在一個專案引用另一個專案的類

在A專案上新增引用,比如你想呼叫B專案的一些類或方法, 在A專案上右鍵-->新增引用(add reference) 選擇本地專案,找到B專案後,新增引用. 程式中使用using B 這樣就可以使用B中的類和方法了.

Android 在專案引入另一個專案作為依賴(引入Module)

文件背景介紹 最近寫一個專案引用了一個第三方庫,MPAndroidChart,要求做一個柱形圖,且點選和未點選呈現兩種顏色,經查詢發現,該庫無法直接設定選中後柱的顏色,只能嘗試修改原始碼,但是由於該庫為直接在gradle中匯入的,程式碼上鎖無法修改,因此該文

Maven專案使用jetty啟動專案[今後會不定期更新矯正本文]

1. maven倉庫地址:     我寫本文的時候用的是如下倉庫:     -->http://mvnrepository.com/artifact/org.eclipse.jetty/jetty-maven-plugin/9.4.0.v20161208 2.Jett