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. [转载] Redis-benchmark使用总结

    转载自http://blog.csdn.net/jiangguilong2000/article/details/24143721 Redis-benchmark为Redis性能测试工具. 指令说明: ...

  2. Iterator & Iterable 和 Comparable&Comparator

    java.lang.Iterator & java.lang.Iterable Iterator和Iterable的区别和联系 iterator是具有迭代状态的对象.它允许你检查它是否有更多的 ...

  3. HBuilder入门(构建h5+APP)

    if(window.plus) { plusReady(); } else { //plusready事件(自带事件)调用了才可使用h5+API document.addEventListener(& ...

  4. android TransFormexecption 解决

    近期编译的时候遇到这个问题.... > com.android.build.api.transform.Transformexception: java.util.zip.ZipExceptio ...

  5. static,final,包,访问修饰符,内部类

    static 关键字可以修饰成员变量,被static修饰的成员变量归属于类static关键字可以修饰成员方法:被static修饰的成员方法可以直接使用类名调用,也可以通过对象调用,建议使用类名.非静态 ...

  6. MFC中小笔记(三)

    10.在添加新Menu之后,代码中 调用 创建的IDR_MENU1,一直出现 Debug Assertion Failed的情况.原因是,没有写入到 项目.RC中,需要更新下rc(资源文件). 然后进 ...

  7. 制作支持 BIOS+UEFI 的 U 盘 grub2+bootmgr 引导 + deepin_recovery + deepin_iso + win_pe

    网盘下载:https://pan.baidu.com/s/1c2GXPo0 U盘为 FAT32,MBR分区表 1.下载:U盘grub2+bootmgr引导2017.12.6.2.7z 2.解压到 U盘 ...

  8. ChatterBot之使用mongodb 03

    上一篇我们已经搭建好了mongodb环境,本篇为简单示例. 废话不多说先上代码然后开始讲解; !!!别忘了打开你的mongdb服务!!!,如果没有mongodb请看上篇如何安装mongodb; # - ...

  9. 自动微分方法(auto diff)

    学习机器学习的同学在学习过程中会经常遇到一个问题,那就是对目标函数进行求微分,线性回归这类简单的就不说.复杂的如神经网络类那些求导过程的酸爽.像我还是那种比较粗心的人往往有十导九错,所以说自动求导就十 ...

  10. 自己动手实现mybatis动态sql

    发现要坚持写博客真的是一件很困难的事情,各种原因都会导致顾不上博客.本来打算写自己动手实现orm,看看时间,还是先实现一个动态sql,下次有时间再补上orm完整的实现吧. 用过mybatis的人,估计 ...