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. Android基础Activity篇之什么是Activity?

    Activity是Android的四大组件之一,也是平时我们用到最多的一个组件,可以用来显示View.官方的说法是Activity一个应用程序的组件,它提供一个屏幕来与用户交互,以便做一些诸如打电话. ...

  2. Java并发之线程管理(线程基础知识)

    因为书中涵盖的知识点比较全,所以就以书中的目录来学习和记录.当然,学习书中知识的时候自己的思考和实践是最重要的.说到线程,脑子里大概知道是个什么东西,但很多东西都还是懵懵懂懂,这是最可怕的.所以想着细 ...

  3. 线程&进程&协程

    线程 线程是应用程序中工作的最小单元,它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务.Threading用 ...

  4. SpringMVC 视图解析器

    SpringMVC 视图解析器 还记得SpringMVC 快速入门中,dispatcher-servlet.xml 配置的视图解析器么.它是SpringMVC 的核心知识点.本章节比较简单,明白视图解 ...

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

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

  6. (转载)java 枚举 循环遍历以及一些简单常见的使用

    本文转载自:http://blog.csdn.net/qq_27093465/article/details/51706076 作者:李学凯 什么时候想用枚举类型: 有时候,在设计一个java mod ...

  7. 安卓开源框架SlidingMenu使用

    在安卓开发中,会使用很多的开源框架,这篇博文讲的是SlidingMenu--侧边栏 SlidingMenu的是一种比较新的设置界面或配置界面效果,在主界面左滑或者右滑出现设置界面, 能方便的进行各种操 ...

  8. idea+scala+spark遇到的一些问题

    1.windows中以本地模式运行spark遇到"Could not locate executable null\bin\winutils.exe in the Hadoop binari ...

  9. C语言之成绩转换

    #include<stdio.h>int main(){int score,grade;scanf("%d",&score);grade=score/10;sw ...

  10. Numpy入门 - 数组切片操作

    本节主要演示数组的切片操作,数组的切片操作有两种形式:更改原数组的切片操作和不更改原数组的切片操作. 一.更改原数组的切片操作 import numpy as np arr = np.array([1 ...