ActiveMQ 和JMS的关系?----->接口和实现的关系
ActiveMq应用场景:1),
JMS 规范:
JMS(Java Messaging Service)应用程序接口,是Java平台上有关面向消息中间件(MOM)的技术规范API.JMS定义了Java中访问消息中间件的接口,
几个关于JMS的概念:
1、JMS Provider:实现JMS接口和规范的消息中间件 eg ActiveMq
2、JMS Message:JMS消息,分3个部分:
(1)消息头:每个消息头字段都有相应的getter和setter方法
(2)消息属性:如果需要除消息头字段以外的值,那么可以使用消息属性
(3)消息体:封装具体的消息数据
3、JMS Producer:消息生产者,创建和发送JMS消息的客户端应用
4、JMS Consumer:消息消费者,接收和处理JMS消息的客户端应用
5、JMS Domain:消息传递域,JMS规范中定义了两种消息传递域:
(1)点对点(point-to-point,简写PTP或P2P)消息传递域,该消息传递域发送的消息目的地称为队列(queue)
特点:
生产者端发送一条消息,消费者端只会有一个消费者消费这个消息。好像打电话,一对一通信!
(2)发布/订阅(publish/subscribe,简写pub/sub)消息传递域,该消息传递域发送的消息目的地称为主题(topic)
特点:
一对多通信,发送一条消息,所有订阅了该目标的消费者都会收到消息。
ActiveMQ的原理是什么?
首先需要创建连接工厂(ConnectionFactory ),用于连接ActiveMQ的服务端,其中ConnectionFactory 又有两个子类分别是队列连接工厂(QueueConnectionFactory)和主题连接工厂(TopicConnectionFactory),在我们发送消息的时候具体使用哪个连接工厂是由消息发送的目的地(Destination)来决定的,Destination是消息生产者的消息发送目标或者说消息消费者的消息来源即某个主题(Topic)
然后在确定了使用哪种连接工厂后,就通过该连接工厂创建出连接对象(Connection),该连接对象是对TCP/IP socket的包装。连接对象可以产生多个会话(session),通过会话来发送消息(Message),这就是我们发送和接受的消息。
消息的顺序消费问题:
ActiveMQ并不能保证消费的顺序性,即便我们使用了消息优先级。而在实际开发中,有些场景又是需要对消息进行顺序消费的,比如:用户从下单、到支付、再到发货等。如果使用ActiveMQ该如何保证消费的顺序性呢?
消息同步和异步接受
持久化订阅
持久化消息到MySQL
网友评论