mq是一个消息服务器;

安装包内置了tomcat,直接登录访问,登录:http://ip:8161/admin/    (相当于dubbo的moniter监控中心) admin admin
传统串行化,并行化:

mq消息服务器集中管理消息:

1)点对点:

  异步接收消息(监听模式):

2)订阅模式:

  必须使用监听模式(异步);


Spring整合mq:

  配置生产者:

     <!-- 创建acitiveMQ消息服务工厂对象,把acitiveMQ消息服务器交给spring管理 -->
<bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<constructor-arg name="brokerURL" value="tcp://192.168.74.132:61616"></constructor-arg>
</bean> <!-- spring jms java消息服务提供工厂对象管理mq消息 -->
<bean id="connectionFactory"
class="org.springframework.jms.connection.SingleConnectionFactory">
<property name="targetConnectionFactory" ref="targetConnectionFactory"></property>
</bean> <!-- spring jms 提供jms消息模版对象 发送消息 -->
<bean class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="connectionFactory"></property>
</bean> <!-- 点对点模式空间 -->
<!-- <bean id="oneQueue" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg value="oneQueue"></constructor-arg> </bean> -->
<!-- 发布订阅模式空间 -->
<!-- <bean id="oneTopic" class="org.apache.activemq.command.ActiveMQTopic">
<constructor-arg value="oneTopic"></constructor-arg> </bean> -->
<bean id="add_update_del_topic" class="org.apache.activemq.command.ActiveMQTopic">
<constructor-arg value="add_update_del_topic"></constructor-arg>
</bean>

  配置消费者:

 <!-- 创建acitiveMQ消息服务工厂对象,把acitiveMQ消息服务器交给spring管理 -->
<bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<constructor-arg name="brokerURL" value="tcp://192.168.74.132:61616"></constructor-arg>
</bean> <!-- spring jms java消息服务提供工厂对象管理mq消息 -->
<bean id="connectionFactory"
class="org.springframework.jms.connection.SingleConnectionFactory">
<property name="targetConnectionFactory" ref="targetConnectionFactory"></property>
</bean> <!-- 点对点模式空间 -->
<!-- <bean id="oneQueue" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg value="oneQueue"></constructor-arg>
</bean> -->
<!-- 发布订阅模式空间 -->
<!-- <bean id="oneTopic" class="org.apache.activemq.command.ActiveMQTopic">
<constructor-arg value="oneTopic"></constructor-arg>
</bean> -->
<bean id="add_update_del_topic" class="org.apache.activemq.command.ActiveMQTopic">
<constructor-arg value="add_update_del_topic"></constructor-arg>
</bean> <!-- 创建接受消息监听器,此监听器是真实接受消息的监听器 -->
<bean id="myMessageListener" class="cn.e3.search.listener.IndexListener"></bean> <!-- spring jms 提供消息监听容器接受消息. -->
<!-- 自动触发接受消息 -->
<bean
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<!-- 指定消息服务器地址 -->
<property name="connectionFactory" ref="connectionFactory"></property>
<!-- 指定接受消息服务器空间 -->
<property name="destination" ref="add_update_del_topic"></property>
<!-- 指定消息接受者 -->
<property name="messageListener" ref="myMessageListener"></property>
</bean>

业务分析,面向服务分布式架构SOA:

商品发生变动后,发送消息至mq:

 jmsTemplate.send(activeMQTopic,new MessageCreator() {
@Override
public Message createMessage(Session session) throws JMSException {
return session.createTextMessage(""+itemId);
}
});

xml中配置监听器,在监听器类中根据接收的id查询变动后的商品,将商品索引文档写入索引库;

<!-- 创建接受消息监听器,此监听器是真实接受消息的监听器 -->
    <bean id="myMessageListener" class="cn.e3.search.listener.IndexListener"></bean>

     public void onMessage(Message message) {

         try {
// 初始化一个商品id
Long itemId = null;
if (message instanceof TextMessage) {
// 接受消息
TextMessage m = (TextMessage) message;
// 获取商品id
itemId = Long.parseLong(m.getText());
//根据商品id查询数据库新的数据
SearchItem searchItem = searchItemMapper.findDatabaseToSolrIndexWithID(itemId); //把数据库数据封装到文档对象
SolrInputDocument doc = new SolrInputDocument();
//封装文档域字段所对应值
//封装文档域所对应数据库查询值
doc.addField("id", searchItem.getId()); //标题
doc.addField("item_title", searchItem.getTitle());
//买点
doc.addField("item_sell_point", searchItem.getSell_point());
//价格
doc.addField("item_price", searchItem.getPrice());
//图片地址
doc.addField("item_image", searchItem.getImage());
//商品类别
doc.addField("item_category_name", searchItem.getCategory_name());
//商品描述
doc.addField("item_desc", searchItem.getItem_desc()); //使用solr服务对象把索引文档对象写入索引库,实现索引库同步
solrServer.add(doc);
//提交
solrServer.commit();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

应用activeMQ消息中间件同步索引库的更多相关文章

  1. 淘淘商城项目_同步索引库问题分析 + ActiveMQ介绍/安装/使用 + ActiveMQ整合spring + 使用ActiveMQ实现添加商品后同步索引库_匠心笔记

    文章目录 1.同步索引库问题分析 2.ActiveM的介绍 2.1.什么是ActiveMQ 2.2.ActiveMQ的消息形式 3.ActiveMQ的安装 3.1.安装环境 3.2.安装步骤 4.Ac ...

  2. 商城08——activeMQ 使用消息队列同步索引库

    1.  课程计划 1.什么是MQ 2.MQ的应用场景 3.ActiveMQ的使用方法. 4.使用消息队列实现商品同步. 2.  同步索引库分析 方案一:在taotao-manager中,添加商品的业务 ...

  3. ActiveMQ整合spring、同步索引库

    1.   Activemq整合spring 1.1. 使用方法 第一步:引用相关的jar包. <dependency> <groupId>org.springframework ...

  4. JAVAEE——宜立方商城09:Activemq整合spring的应用场景、添加商品同步索引库、商品详情页面动态展示与使用缓存

    1. 学习计划 1.Activemq整合spring的应用场景 2.添加商品同步索引库 3.商品详情页面动态展示 4.展示详情页面使用缓存 2. Activemq整合spring 2.1. 使用方法 ...

  5. 如何在分布式环境中同步solr索引库和缓存信息

    天气依旧很好,主要是凉快.老习惯,我在北京向各位问好. 搜索无处不在,相信各位每天都免不了与它的亲密接触,那么我想你确实有必要来了解一下它们,就上周在公司实现的一个小需求来给各位分享一下:如何在分布式 ...

  6. Docker安装ElasticSearch 以及使用LogStash实现索引库和数据库同步

    1:下载 ElasticSearch 镜像 docker pull docker.io/elasticsearch:5.6.8 2:创建 ElasticSearch 容器: 注意:5.0默认分配jvm ...

  7. Lucene第二篇【抽取工具类、索引库优化、分词器、高亮、摘要、排序、多条件搜索】

    对Lucene代码优化 我们再次看回我们上一篇快速入门写过的代码,我来截取一些有代表性的: 以下代码在把数据填充到索引库,和从索引库查询数据的时候,都出现了.是重复代码! Directory dire ...

  8. lucene内存索引库、分词器

    内存索引库 特点 在内存中开辟一块空间,专门为索引库存放.这样有以下几个特征: 1)    因为索引库在内存中,所以访问速度更快. 2)    在程序退出时,索引库中的文件也相应的消失了. 3)    ...

  9. lucene索引库的增删改查操作

    1. 索引库的操作 保持数据库与索引库的同步 说明:在一个系统中,如果索引功能存在,那么数据库和索引库应该是同时存在的.这个时候需要保证索引库的数据和数据库中的数据保持一致性.可以在对数据库进行增.删 ...

随机推荐

  1. Python之matplotlib学习(一)

    小试牛刀 在上一节已经安装好matplotlib模块,下面使用几个例子熟悉一下. 对应的一些文档说明: http://matplotlib.org/1.3.1/api/pyplot_summary.h ...

  2. mysql 5.7.13 安装配置方法图文教程(linux) (转)

    http://www.jb51.net/article/87160.htm ************************************************ linux环境Mysql ...

  3. iis7 部署网站 403错误

    C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i 403 - 禁止访问: 访问被拒绝. 您无权使用所提供的凭据查看此 ...

  4. AutoMapper在asp.netcore中的使用

    # AutoMapper在asp.netcore中的使用  automapper 是.net 项目中针对模型之间转换映射的一个很好用的工具,不仅提高了开发的效率还使代码更加简洁,当然也是开源的,htt ...

  5. [Machine Learning]学习笔记-线性回归

    模型 假定有i组输入输出数据.输入变量可以用\(x^i\)表示,输出变量可以用\(y^i\)表示,一对\(\{x^i,y^i\}\)名为训练样本(training example),它们的集合则名为训 ...

  6. WebApi接收复杂类型参数

    当接收实体时,该实体类不能添加Serializable属性,否则传来的json数据无法映射成功?

  7. LinuxRPM包安装

    转载注明出处:原文地址 ## LinuxRPM包安装 二进制包(RPM包.系统默认包) RPM安装 rpm -ivh 包全名(查询依赖网址:http://www.rpmfind.net) -i(ins ...

  8. webMagic解析淘宝cookie 提示Invalid cookie header

    webMagic解析淘宝cookie 提示Invalid cookie header 在使用webMagic框架做爬虫爬取淘宝极又家页面时候一直提醒cookie设置不可用如下图 淘宝的验证特别严重,c ...

  9. rabbitmq(中间消息代理)在python中的使用

    在之前的有关线程,进程的博客中,我们介绍了它们各自在同一个程序中的通信方法.但是不同程序,甚至不同编程语言所写的应用软件之间的通信,以前所介绍的线程.进程队列便不再适用了:此种情况便只能使用socke ...

  10. Netty之粘包分包

    粘包现象 客户端在一个for循环内连续发送1000个hello给Netty服务器端, Socket socket = new Socket("127.0.0.1", 10101); ...