最近工作中遇到了个涉及HornetQ的问题,之前对这一块只是有个大概了解,没有深入学习,正好借助这个机会把它研究一下。Hornet(大黄蜂)Q(Queue),大黄蜂队列,想想是不是很炫酷^_^。
问题1:什么是HornetQ?
HornetQ是一个消息的中间件,异步的消息系统,100%开源,可独立部署,也可以集成到类如Jboss之类的框架中。
Note:顺便扯句对框架的理解,框架类似于毛坯房,架子给你搭好了,但是我们是没法居住的,也就是不能使用的,必须装修装修,买个床,粉下墙之类的。
问题2:为什么使用HornetQ?
这个直接引用官网说明了
-
HornetQ是100%的开源软件。 HornetQ 采用 Apache v 2.0开源协议,对用户的限制最小。
-
HornetQ的设计强调可用性。
-
采用Java语言编写。可以在任何Java 6+ 的平台上运行。这几乎包括了从Windows到IBM mainframes的每个平台。
-
性能出众。不但对非持久化消息的处理性能达到了非常高的性能。独特高效的日志(journal)使持久消息处理接近非持久消息的性能。
-
功能全面。不仅拥有其它成熟消息产品所具有的全部功能,而且还有很多独特的功能。
-
HornetQ的设计遵从了简约的原则。对第三方软件的依赖极少。根据不同的需要, HornetQ可以单独运行,也可以运行于JEE应用服务器中。它还可以嵌入到你自己的应用程序中。
-
完美的可获得性。HornetQ提供自动客户端失效备援(automatic client failover)功能,能保证在服务器故障时没有消息丢失或消息重复。
-
超级灵活的集群方案。可以控制集群进行消息负载均衡的方式。分布在不同地理位置的各个集群间可以通过非可靠的网络连接形成一个全球网络。 还可以非常灵活地配置消息路由。
问题3:HornetQ支持的消息模式有哪些?
HornetQ支持两种消息模式:消息队列和广播/订阅模式
-
消息队列模式:
要点:
1)可以有多个生产者;也可以有多个消费者。
2)消息的发送和接收是完全独立的
3)一个消息只能传送给一个消费者
4)消息在被传送到队列的同时,会被持久化,持久化的目的在于保证可靠传输
5)消息在被消费者处理完之后,会向队列发送确认消息,队列收到确认消息后,才会把消息从队列中删除。
2. 消息的广播/订阅模式
要点:
1)每个消息可以有多个消费者
2)消费者要先订阅Topic,才能消费消息
3)订阅者有两种运行方式
i>非固定方式,订阅者必须保持运行状态,才能消费消息
ii>固定方式,即使订阅者没有被激活,也能接收到发布的消息,因为消息会先被保留,直到被接收。
问题4:客户端应用程序是怎么调用消息系统进行消息的发送和接收的?
大体上分为两类,私有的API和公共的API
1)JMS,大部分的消息系统都支持,通用性很强,限制是只有Java客户端可以调用
2)私有的API,HornetQ有一套自己的使用API,提供一些公共API没有的功能
3)RESTful API等
问题5:消息系统中的桥接和路由是什么意思?
桥接和路由实际上就是将消息在不同的队列中传递,有一个队列传到另一个队列。
时间不早了,今天只看了个皮毛,理了下概念,明天继续^_^