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

创建2个工程,生产者和消费者

  1. 测试点对点和广播
  2. 发送常见类型的消息
  3. 例如:文本(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();}}}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/523546.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新一代私有云来了!看透基于开源生态的产品化

戳蓝字“CSDN云计算”关注我们哦&#xff01;文 | 易捷行云&#xff08;EasyStack&#xff09;创始人 陈喜伦来源 | 开源云中文社区进入云计算大时代&#xff0c;中大客户和产业互联网化是云计算的主战场&#xff0c;获取企业级客户是主旋律。对企业级客户来说以新一代私有云为…

mysql 用户管理表_mysql用户管理

msyql用户定义&#xff1a;使用某个用户 从哪个(些)地址访问我的数据库主机范围单独IP&#xff1a;10.0.0.200一个网段:10.0.0.% --->10.0.0.1-->10.0.0.254一个地址范围&#xff1a;10.0.0.5% ---->50-59用户的功能&#xff1a;1、用来登录mysql数据库2、用来管理数据…

8月有望推出5G套餐,资费或低于4G价格;为专利技术,华为5000万美元收购技术公司;AMD和三星宣布合作……...

关注并标星星CSDN云计算极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go 宝宝树孕育APP新增即时交互功…

从数组随机抽取5个不重复_Power Query 如何保证随机抽取元素不重复

继续昨天的话题&#xff0c;昨天我们实现完全的随抽取列表元素&#xff0c;有一个问题就是可能几次会抽取同一个位置的元素&#xff1a;1-50中随机抽取5个数值&#xff0c;点击刷新&#xff0c;就会出现不同的结果&#xff0c;如上图可能会出现两个相同的数值&#xff0c;如何确…

vba上传指定文件ftp服务器

文章目录一、需求分析&#xff1a;二、操作流程&#xff1a;2.1 【开发工具】-【宏】2.2 【宏】-【编辑】2.3 【把脚本复制进去】2.4 脚本如下2.5 修改位置2.5.1 修改sheet名称和表格一致2.5.2 修改Cells(2,3)2.5.3 修改4 to 1002.5.4 修改Cells(i,3)2.5.5 修改发ftp信息2.5.6 …

云存储精华问答 | 云存储是如何工作的?

云存储是一种网上在线存储&#xff08;英语&#xff1a;Cloud storage&#xff09;的模式&#xff0c;即把数据存放在通常由第三方托管的多台虚拟服务器&#xff0c;而非专属的服务器上。今天就让我们来看看关于云陈存储的精华问答吧。1Q&#xff1a;云存储是如何分类的&#x…

mysql如何实现管理权限分离_基于SpringCloud+vue(ElementUI)+mySQL前后端分离设计之--搭建权限管理系统...

权限图&#xff1a;pom.xmlxsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">4.0.0com.serverauthority0.0.1-SNAPSHOTjarauthorityauthority project for Spring Bootorg.springframework.bootspring-boot-s…

刚刚,Python内幕被爆出!老码农:没控制住,心态已崩!

作为一名老码农&#xff0c;我的心这次凉透了&#xff01;事情起因很简单&#xff1a;前天我晚上正在全国最大的同性组织某Hub上浏览时候&#xff0c;发现这样的一条信息&#xff1a;Python 116K 超过 C、JS, 薪酬排行第一&#xff08;最大招聘网站Indeed.com数据&#xff09;噗…

vba上传文件到ftp服务器指定目录下面

vba上传文件到ftp服务器指定目录 脚本形式 文章目录1. 测试版本无校验&#xff1a;2. 测试版本有检验3. 文件不存在校验版本4. 文件不存在校验必填项校验版本1. 测试版本无校验&#xff1a; Sub 按钮1_Click() Dim i, str1, str2, str3, str4, str5, str6, str7, str8, str9, s…

分布式存储首选,浪潮商用机器FP5466G2服务器测评分析

戳蓝字“CSDN云计算”关注我们哦&#xff01;如今随着信息时代的到来&#xff0c;以云计算、大数据、人工智能为代表的新晋技术与应用实现了爆发式的增长&#xff0c;随之而来促生了原本存在于各个行业的大量业务应用中PB级&#xff0c;甚至EB级的海量版数据信息&#xff0c;这…

pipelines mysql_Scrapy爬取豆瓣图书数据并写入MySQL

介绍本篇涉及的内容主要是获取分类下的所有图书数据&#xff0c;并写入MySQL准备Python3.6、Scrapy、Twisted、MySQLdb等演示代码一、创建项目scrapy startproject BookSpider #创建项目scrapy genspider douban book.douban.com #创建豆瓣爬虫二、创建测试类(main.py)from scr…

独行速众行远,BitTitan携手世纪互联蓝云助力用户数据完美迁移

戳蓝字“CSDN云计算”关注我们哦&#xff01;近日&#xff0c;Saas解决方案提供商BitTitan宣布&#xff0c;将拓展与世纪互联蓝云的合作&#xff0c;双方将在中国的云服务市场上线BitTitan广受欢迎的MigrationWiz用户数据迁移套装方案。BitTitan是一家致力于让IT专业人员通过自…

Kafka精华问答 | 为什么要用Message Queue?

Kafka is a distributed,partitioned,replicated commit logservice。它提供了类似于JMS的特性&#xff0c;但是在设计实现上完全不同&#xff0c;此外它并不是JMS规范的实现。今天就让我们一起来看看关于Kafka 的精华问答吧。1Q&#xff1a;Kafka的主要功能是什么&#xff1f;…

360深度实践:Flink与Storm协议级对比

戳蓝字“CSDN云计算”关注我们哦&#xff01;文 | 张馨予 来源 | 高可用架构作者 张馨予&#xff0c;360 大数据计算平台负责人。北京邮电大学硕士&#xff0c;2015年加入360系统部&#xff0c;一直致力于公司大数据计算平台的易用性、稳定性和性能优化的研发工作。目前主要负…

layui获得列表json数据_golang实战开发之博客功能篇:文章列表的读取与展示和分类筛选展示处理...

前面我们介绍了文章详情页面的展示的逻辑代码实现&#xff0c;这一节&#xff0c;我们将继续讲解文章列表的读取和展示、文章根据分类进行筛选、最新文章、热门文章等的调用处理逻辑。首先&#xff0c;我们先编写文章列表页的前端代码。这里&#xff0c;我们文章采用类似WordPr…

“智企云中享“,首届SAP中国云大会召开

2019 年 6 月 5 日&#xff0c;上海讯— 今日&#xff0c;首届SAP云大会在上海盛大召开。作为SAP云计算家族在中国的首秀&#xff0c;大会全面呈现了SAP云业务的战略、产品、商业场景、浸入式体验。作为体验管理领域的领导者&#xff0c;SAP以覆盖企业运营全价值链的云服务解决…

SpringBoot入门到精通_第7篇 _必知必会总结

接上一篇&#xff1a;SpringBoot入门到精通_第6篇 _必知必会

容器精华问答 | 如何进行跨机器的Container做Link ?

戳蓝字“CSDN云计算”关注我们哦&#xff01;云计算的发展日新月异&#xff0c;新技术层出不穷&#xff0c;尤其容器技术自2013年Docker容器问世以来一路高歌猛进红遍大江南北&#xff0c;与虚拟机相比&#xff0c;容器更显优势&#xff0c;有着更轻量、更快捷、占用资源更少&a…

腾讯也有“神盾局”?秀出“技术肌肉”就靠TA了……

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;漫威的超级英雄世界中&#xff0c;“神盾局”一直凭借着不少的先进武器装备&#xff0…