学习淘淘商城第五十四课(为何引入ActiveMQ)

110 篇文章 383 订阅
9 篇文章 0 订阅

        我们在学习Solr索引的时候,每当添加一个商品后,都要把数据库中的数据全部重新导入到索引库,特别消耗性能和时间,这显然是我们所不能忍受的,这就需要优化我们的方案。最好是在商品添加的时候就单独将该商品同步到索引库,这样便简单快捷地实现了数据库与索引库的同步。

        摆在我们面前的方案有三个:

方案一:在taotao-manager中,添加商品的业务逻辑中,添加一段同步索引库的业务逻辑。

缺点:很明显,这样会导致业务逻辑耦合度很高,业务拆分不明确,这与我们当初拆分工程,职能单一、明确的原则相违背,故不可采用。

方案二:业务逻辑在taotao-search中实现,调用服务在taotao-manager实现,业务逻辑分开。

缺点:服务与服务之间耦合度变高,服务的启动有先后顺序。服务设计的原则便是各自干各自的活儿,启动要保证互不依赖,服务之间不应该有调用行为,一旦有调用行为,依赖的一方便会因被依赖一方出现故障而无法工作。

方案三:使用消息队列,MQ是一个消息中间件。如下图所示。

       怎么理解消息中间件呢?我们可以把它理解为一个秘书,消息的发布者就是大老板,大老板下午三点要开个会,他只需跟秘书说一声,下午三点,我要开个会,就行了,老板不用管秘书是怎样通知各项目经理的,也不用管项目经理要带什么材料,他所做的只是告诉秘书一声而已。秘书负责与各个项目经理联系,告诉各个项目经理应该准备什么。MQ便相当于"秘书"这个角色。当添加一个商品时,商品服务只需要告诉消息中间件MQ,MQ便去通知其它服务做各自该做的事情,比如通知搜索服务去同步索引库,通知redis服务去同步缓存,通知生成静态页面等等。


         常见的作为MQ的中间件有:ActiveMQ、RabbitMQ、Kafka。我们要学习的是ActiveMQ,其它的都大同小异。

         那么,什么是ActiveMQ?

         ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。
        主要特点:
1. 多种语言和协议编写客户端。语言: Java, C, C++, C#, Ruby, Perl, Python, PHP。应用协议: OpenWire,Stomp REST,WS Notification,XMPP,AMQP
2. 完全支持JMS1.1和J2EE 1.4规范 (持久化,XA消息,事务)
3. 对Spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性
4. 通过了常见J2EE服务器(如 Geronimo,JBoss 4, GlassFish,WebLogic)的测试,其中通过JCA 1.5 resource adaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容J2EE 1.4 商业服务器上
5. 支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA
6. 支持通过JDBC和journal提供高速的消息持久化
7. 从设计上保证了高性能的集群,客户端-服务器,点对点
8. 支持Ajax
9. 支持与Axis的整合
10. 可以很容易得调用内嵌JMS provider,进行测试

        ActiveMQ的消息形式

        对于消息的传递有两种类型:
一种是点对点的,即一个生产者和一个消费者一一对应;
另一种是发布/订阅模式,即一个生产者产生消息并进行发送后,可以由多个消费者进行接收。
JMS定义了五种不同的消息正文格式,以及调用的消息类型,允许你发送并接收以一些不同形式的数据,提供现有消息格式的一些级别的兼容性。我们用的最多的也就是TextMessage而已。
  · StreamMessage -- Java原始值的数据流
  · MapMessage--一套名称-值对
  · TextMessage--一个字符串对象
  · ObjectMessage--一个序列化的 Java对象
  · BytesMessage--一个字节的数据流

        我们可以通过下面一张图来加深理解,图上半部分是"发布/订阅者"模式,两个发布者各自发布了一条消息,每条消息都可以被多个Consumer接收到。图下半部分是"面对面"模式,两个发布者各自发布了一条消息,压入队列当中,队列的特点是先进先出,一旦有某个消费者拿走了一条消息,队列中就少了一条消息,剩下的消费者就不可能再消费那条消息了,因此也就做到了一对一。


淘淘商城是一个综合性的B2C平台,类似与京东、天猫商城,其打造的是商业模式为“社区+电子商务”, 用户不只是在社区中有自己的圈子,还可以将电商加入到社区中,整个电商网站实现的功能非常之多,采用分布式的系统架构设计,包括后台管理、前台系统、购物车系统、订单系统、单点登录系统、搜索系统、会员系统等。 1、 该项目采用了分布式系统的架构,目前,在大型网站中使用非常广泛。 2、 各个系统之间采用接口调用的方式进行交互,即:面向服务的开发,每个团队、系统,分工明确,各司其职。 3、 后台系统使用了目前主流的框架技术,Spring、SpringMVC、Mybatis实现,开发更有效率,网站性能更高。 4、 后台系统中的前端UI采用了Jquery EasyUI完成,界面更加的美观。 5、 系统后台使用多级菜单布局,并使用KindEditor框架作为富文本编辑器。 6、 前台系统中采用CSS+DIV技术开发界面,使用Jquery完成和动态效果和后台服务的数据交互。 7、 项目引入了内容关系系统的概念,实现了对网站大部分内容的管理维护,使开发更加的高效。 8、 使用单点登录系统(SSO)来实现集群状态下的用户数据的维护。 9、 使用高性能的KV数据库Redis完成数据的存储以及缓存,提高数网站整体的性能。 10、 使用企业级开源系统Solr完成商品以及订单数据的搜索。 11、 在数据库存储方面使用MySQL的主从复制架构,使用Spring的AOP实现数据的读写分离,以保证在“读多写少”的场景下的高性能。 12、 使用高性能的企业级消息系统RabbitMQ,完了系统间的通信,使得系统间的耦合度大大降低。 13、 部署方面使用LVS + keepalived + Nginx实现了双机主备、双主热备,实现了一个高可用的系统架构。 14、 项目开发采用团队式的开发,统一使用Maven私服构建项目,使用统一的SVN服务进行代码的管理。 【程内容】 项目功能实现分析 RESTful Web Service、SVN 项目讲解、环境搭建 后台系统功能实现 前台系统搭建、实现、内容管理系统实现 Redis入门 单点登录系统 订单系统、Quartz入门 Solr入门以及搜索系统实现 MQ学习、改造搜索、商品详情缓存逻辑 实现购物车、读写分离 dubbo入门、优化单点登录系统 分布式部署架构讲解以及实施 分组实战 + 项目总结以及就业指导 拔高--Redis集群、Tomcat优化、MySQL优化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值