日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

企业级实战03_真实项目实战SpringMVC整合ActiveMQ

發布時間:2024/9/27 javascript 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 企业级实战03_真实项目实战SpringMVC整合ActiveMQ 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

創建2個工程,生產者和消費者

  • 測試點對點和廣播
  • 發送常見類型的消息
  • 例如:文本(String)、對象(Object)
    文本轉Long
    String text = “123”;
    Long.parseLong(text)
    數組轉集合
    Arrays.toArray(list)





  • 引入依賴

    <?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.gblfy.activemq</groupId><artifactId>producer</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><name>producer Maven Webapp</name><url>http://www.gblfy.com</url><properties><!--全局編碼設置--><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><!--全局maven編譯版本--><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><!--全局版本控制--><spring.version>4.2.4.RELEASE</spring.version></properties><dependencies><!-- Spring Start --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jms</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${spring.version}</version></dependency><!-- Spring End --><dependency><groupId>junit</groupId><artifactId>junit</artifactId></dependency><!--解析/反解析數據--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId></dependency><dependency><groupId>javassist</groupId><artifactId>javassist</artifactId></dependency><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId></dependency><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><scope>provided</scope></dependency><!--ActiveMQ Start--><dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-client</artifactId><version>5.13.4</version></dependency><!--ActiveMQ End--></dependencies><build><plugins><!--Tomcat7插件--><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version><configuration><!-- 指定端口 --><port>9004</port><!-- 請求路徑 --><path>/</path></configuration></plugin></plugins></build> </project>




    消費者


    引入配置文件

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="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.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><!-- 真正可以產生Connection的ConnectionFactory,由對應的 JMS服務廠商提供--> <bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> <property name="brokerURL" value="tcp://192.168.25.135:61616"/> </bean><!-- Spring用于管理真正的ConnectionFactory的ConnectionFactory --> <bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory"> <!-- 目標ConnectionFactory對應真實的可以產生JMS Connection的ConnectionFactory --> <property name="targetConnectionFactory" ref="targetConnectionFactory"/> </bean> <!-- Spring提供的JMS工具類,它可以進行消息發送、接收等 --> <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> <!-- 這個connectionFactory對應的是我們定義的Spring提供的那個ConnectionFactory對象 --> <property name="connectionFactory" ref="connectionFactory"/> </bean> <!--這個是隊列目的地,導入索引庫--> <bean id="queueSolrDestination" class="org.apache.activemq.command.ActiveMQQueue"> <constructor-arg value="pinyougou_queue_solr"/> </bean> <!--這個是隊列目的地,導入索引庫--> <bean id="queueSolrDeleteDestination" class="org.apache.activemq.command.ActiveMQQueue"> <constructor-arg value="pinyougou_queue_solr_delete"/> </bean> <!--這個是訂閱模式 生成商品詳細頁--> <bean id="topicPageDestination" class="org.apache.activemq.command.ActiveMQTopic"> <constructor-arg value="pinyougou_topic_page"/> </bean> <!--這個是訂閱模式 刪除商品詳細頁--> <bean id="topicPageDeleteDestination" class="org.apache.activemq.command.ActiveMQTopic"> <constructor-arg value="pinyougou_topic_page_delete"/> </bean> </beans>

    注:掃描包,如果spring的配置文件中有此配置可以省略
    在需要發送消息的類中,注入2個對象:

    @Autowired private Destination queueSolrDestination;//用于發送solr導入的消息 @Autowired private JmsTemplate jmsTemplate;

    假設發送的數據是一個list,list沒有實現序列化,而發送的消息類型,如果是對象必須實現序列化

    List<TbItem> itemList = goodsService.findItemListByGoodsIdandStatus(ids, status);

    建議發送消息類型采用文本類型
    利用fastjson工具類,將list轉換為json字符串,接收的時候,在轉回來是很方便的

    final String jsonString = JSON.toJSONString(itemList); jmsTemplate.send(queueSolrDestination, new MessageCreator() { @Overridepublic Message createMessage(Session session) throws JMSException { return session.createTextMessage(jsonString);}});





    消費者客戶端
    引入依賴和生產者一樣
    引入配置文件applicationContext-jms-consumer.xml

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="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.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><!-- 真正可以產生Connection的ConnectionFactory,由對應的 JMS服務廠商提供--> <bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> <property name="brokerURL" value="tcp://192.168.25.135:61616"/> </bean><!-- Spring用于管理真正的ConnectionFactory的ConnectionFactory --> <bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory"> <!-- 目標ConnectionFactory對應真實的可以產生JMS Connection的ConnectionFactory --> <property name="targetConnectionFactory" ref="targetConnectionFactory"/> </bean> <!--這個是隊列目的地,導入索引庫--> <bean id="queueSolrDestination" class="org.apache.activemq.command.ActiveMQQueue"> <constructor-arg value="pinyougou_queue_solr"/> </bean> <!-- 消息監聽容器 導入索引庫--><bean class="org.springframework.jms.listener.DefaultMessageListenerContainer"><property name="connectionFactory" ref="connectionFactory" /><property name="destination" ref="queueSolrDestination" /><property name="messageListener" ref="itemSearchListener" /></bean><!--這個是隊列目的地,導入索引庫--> <bean id="queueSolrDeleteDestination" class="org.apache.activemq.command.ActiveMQQueue"> <constructor-arg value="pinyougou_queue_solr_delete"/> </bean> <!-- 消息監聽容器 導入索引庫--><bean class="org.springframework.jms.listener.DefaultMessageListenerContainer"><property name="connectionFactory" ref="connectionFactory" /><property name="destination" ref="queueSolrDeleteDestination" /><property name="messageListener" ref="itemDeleteListener" /></bean></beans>

    新建一個監聽類itemSearchListener接收文本類型消息
    注,這個監聽類上加上@Component注解,并且能被spring的包掃描掃描到
    下面監聽類的包是:package com.pinyougou.search.service.impl;
    在此項目spring的配置文件中有掃描包的配置,因此,可以被掃描到

    package com.pinyougou.search.service.impl;import java.util.List;import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.TextMessage;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component;import com.alibaba.fastjson.JSON; import com.pinyougou.pojo.TbItem; import com.pinyougou.search.service.ItemSearchService; @Component public class ItemSearchListener implements MessageListener {@Autowiredprivate ItemSearchService itemSearchService;@Overridepublic void onMessage(Message message) {TextMessage textMessage=(TextMessage)message;try {String text = textMessage.getText();//json字符串System.out.println("監聽到消息:"+text);List<TbItem> itemList = JSON.parseArray(text, TbItem.class);itemSearchService.importList(itemList);System.out.println("導入到solr索引庫");} catch (JMSException e) {// TODO Auto-generated catch blocke.printStackTrace();}} }

    發送對象類型消息

    @Autowiredprivate JmsTemplate jmsTemplate;@Autowiredprivate Destination queueTextDestination;/*** 發送文本消息* @param text*/public void sendTextMessage(final String text){jmsTemplate.send(queueTextDestination, new MessageCreator() {public Message createMessage(Session session) throws JMSException { // return session.createTextMessage(text);return session.createObjectMessage(對象);}});}

    新建一個監聽接收對象類型消息

    在這里插入代碼片package com.pinyougou.search.service.impl;import java.util.Arrays;import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.ObjectMessage;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component;import com.pinyougou.search.service.ItemSearchService; @Component public class ItemDeleteListener implements MessageListener {@Autowiredprivate ItemSearchService itemSearchService;@Overridepublic void onMessage(Message message) {ObjectMessage objectMessage =(ObjectMessage)message;try {Long[] goodsIds= (Long[]) objectMessage.getObject();System.out.println("監聽獲取到消息:"+goodsIds);itemSearchService.deleteByGoodsIds(Arrays.asList(goodsIds));System.out.println("執行索引庫刪除");} catch (JMSException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

    總結

    以上是生活随笔為你收集整理的企业级实战03_真实项目实战SpringMVC整合ActiveMQ的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。