同步索引库分析
方案一:在taotao-manager中,添加商品的业务逻辑中,添加一个同步索引库的业务逻辑。
缺点:业务逻辑耦合度高,业务拆分不明确
方案二:业务逻辑在taotao-search中实现,调用服务在taotao-manager实现。业务逻辑分开。
缺点:服务之间的耦合度变高。服务的启动有先后顺序。
方案三:使用消息队列。MQ是一个消息中间件
MQ是一个消息中间件,常见的有ActiveMQ、RabbitMQ、kafka
什么是ActiveMQ
MQ是一个消息中间件,实现系统之间的通信和解耦
ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位
特点
- 多种语言和协议编写客户端。语言: Java, C, C++, C#, Ruby, Perl, Python, PHP。应用协议: OpenWire,Stomp REST,WS Notification,XMPP,AMQP
- 完全支持JMS1.1和J2EE 1.4规范 (持久化,XA消息,事务)
- 对Spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性
- 通过了常见J2EE服务器(如 Geronimo,JBoss 4, GlassFish,WebLogic)的测试,其中通过JCA 1.5 resource adaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容J2EE 1.4 商业服务器上
- 支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA
- 支持通过JDBC和journal提供高速的消息持久化
- 从设计上保证了高性能的集群,客户端-服务器,点对点
- 支持Ajax
- 支持与Axis的整合
- 可以很容易得调用内嵌JMS provider,进行测试
ActiveMQ的消息形式
对于消息的传递有两种类型
- 一种是点对点的,即一个生产者和一个消费者一一对应
- 另一种是发布/订阅模式(广播模式),即一个生产者产生消息并进行发送后,可以由多个消费者进行接收
JMS定义了五种不同的消息正文格式,以及调用的消息类型,允许你发送并接收以一些不同形式的数据,提供现有消息格式的一些级别的兼容性。
· StreamMessage – Java原始值的数据流
· MapMessage–一套名称-值对
· TextMessage–一个字符串对象
· ObjectMessage–一个序列化的 Java对象
· BytesMessage–一个字节的数据流
ActiveMQ的安装
进入http://activemq.apache.org/下载ActiveMQ,使用的版本是5.12.0(apache-activemq-5.12.0-bin.tar.gz)
安装环境
- 需要jdk
- 安装Linux系统
安装步骤
- 在环境里面安装jdk
https://blog.youkuaiyun.com/weixin_42869365/article/details/83894210 - 注意关闭防火墙,修改i18n为GBK
- 把ActiveMQ 的压缩包上传到Linux的/usr/activemq下,解压缩
apache-activemq-5.12.0-bin.tar.gz
-
在apache-activemq-5.12.0文件夹下的文件如下。
注意:如果ActiveMQ整合spring时,pom文件依赖activemq-all-5.12.0.jar包。建议使用5.11.2
-
在/usr/activemq/apache-activemq-5.12.0/bin目录下启动
./activemq start
./activemq status
./activemq stop
-
进入管理后台:http://192.168.25.132:8161/admin
用户名:admin 密码:admin
-
点击home/Queues/topics…的时候会报503错误,原因是你的机器名和IP地址没有对应上
-
修改hosts文件,vim /etc/hosts,配置IP和域名的映射关系
-
如下显示域名(机器名),但不一定就是正确的
真正对的域名所在位置文件 vim /etc/sysconfig/network
[root@activemq sysconfig]# vim network
NETWORKING=yes
HOSTNAME=activemq
-
修改hosts文件,vim /etc/hosts,配置IP和域名的映射关系
-
重新启动activemq服务就可以解决上面的503错误
ActiveMQ使用
topic是广播形式,queue是点对点的形式