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. [转载] Tomcat架构分析

    转载自http://gearever.iteye.com/category/223001

  2. [转载] TCP长连接与短连接的区别

    转载自http://www.cnblogs.com/liuyong/archive/2011/07/01/2095487.html 1. TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前 ...

  3. SSD中的GC机制以及Trim

    GC(Garbagecollection)垃圾回收  所谓GC就是把一个闪存块里的"有效"页数据复制到一个"空白"块里,然后把这个块完全擦除.GC是 SSD里的 ...

  4. redis源码分析之有序集SortedSet

    有序集SortedSet算是redis中一个很有特色的数据结构,通过这篇文章来总结一下这块知识点. 原文地址:http://www.jianshu.com/p/75ca5a359f9f 一.有序集So ...

  5. "MySql.Data.MySqIClient.MySqlProviderSevices”违反了继承安全 性规则。派生类型必须与基类型的安全可访问性匹配或者比基类型的安 全可访问性低。 "解决方法

    写Code First 时(使用的是MySql数据库),添加好EntityFrame.MySql.Data .MySql.Data.Entity后 ,写好TestDbContext类. 运行时报出一个 ...

  6. SQL语言(二) java怎样连接操作数据库中的数据

    import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.S ...

  7. C# 中枚举的一点研究(跳过一些net坑的研究而已)

    之前一直使用Enum.Parse()将字符串转为枚举,没有深究,后面发现一个问题后对下面的Enum有了一个初步研究(.net 4.0).看下面代码. (留意,枚举类型是值类型,其值不能为Null,所以 ...

  8. gdb的多线程调试

    info threads 可以查看当前进程有哪些线程 thread ID 可以切换到线程ID bt 查看当前线程堆栈 set scheduler-locking on多线程调试过程中, 线程会来回切换 ...

  9. Python中的选择排序

    选择排序 选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理如下.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大 ...

  10. 使用SSH快速下载Git项目

    文章首发于[博客园-陈树义],点击跳转到原文使用SSH快速下载Git项目. Git下载项目的几种方式 Git是常用的代码版本技术,而GitLab则是开源的Git版本管理软件,GitLab是最受欢迎的版 ...