php队列数据 php栈与队列的区别( 三 )


(2)扩展流程(发短信,配送处理)订阅队列消息 。采用推或拉的方式获取消息并处理 。
(3)消息将应用解耦的同时,带来了数据一致性问题 , 可以采用最终一致性方式解决 。比如主数据写入数据库,扩展应用根据消息队列,并结合数据库方式实现基于消息队列的后续处理 。
3.2日志收集系统
分为Zookeeper注册中心 , 日志收集客户端,Kafka集群和Storm集群(OtherApp)四部分组成 。
Zookeeper注册中心 , 提出负载均衡和地址查找服务;
日志收集客户端,用于采集应用系统的日志,并将数据推送到kafka队列;
四、JMS消息服务
讲消息队列就不得不提JMS。JMS(Java Message Service,Java消息服务)API是一个消息服务的标准/规范,允许应用程序组件基于JavaEE平台创建、发送、接收和读取消息 。它使分布式通信耦合度更低,消息服务更加可靠以及异步性 。
在EJB架构中,有消息bean可以无缝的与JM消息服务集成 。在J2EE架构模式中,有消息服务者模式,用于实现消息与应用直接的解耦 。
4.1消息模型
在JMS标准中,有两种消息模型P2P(Point to Point),Publish/Subscribe(Pub/Sub) 。
4.1.1 P2P模式
P2P模式包含三个角色:消息队列(Queue) , 发送者(Sender),接收者(Receiver) 。每个消息都被发送到一个特定的队列 , 接收者从队列中获取消息 。队列保留着消息,直到他们被消费或超时 。
P2P的特点
每个消息只有一个消费者(Consumer)(即一旦被消费,消息就不再在消息队列中)
发送者和接收者之间在时间上没有依赖性 , 也就是说当发送者发送了消息之后,不管接收者有没有正在运行,它不会影响到消息被发送到队列
接收者在成功接收消息之后需向队列应答成功
如果希望发送的每个消息都会被成功处理的话,那么需要P2P模式 。(架构KKQ:466097527,欢迎加入)
4.1.2 Pub/sub模式
包含三个角色主题(Topic) , 发布者(Publisher),订阅者(Subscriber)。多个发布者将消息发送到Topic,系统将这些消息传递给多个订阅者 。
Pub/Sub的特点
每个消息可以有多个消费者
发布者和订阅者之间有时间上的依赖性 。针对某个主题(Topic)的订阅者,它必须创建一个订阅者之后,才能消费发布者的消息 。
为了消费消息,订阅者必须保持运行的状态 。
为了缓和这样严格的时间相关性 , JMS允许订阅者创建一个可持久化的订阅 。这样,即使订阅者没有被激活(运行),它也能接收到发布者的消息 。
如果希望发送的消息可以不被做任何处理、或者只被一个消息者处理、或者可以被多个消费者处理的话 , 那么可以采用Pub/Sub模型 。
4.2消息消费
在JMS中,消息的产生和消费都是异步的 。对于消费来说,JMS的消息者可以通过两种方式来消费消息 。
(1)同步
订阅者或接收者通过receive方法来接收消息,receive方法在接收到消息之前(或超时之前)将一直阻塞;
(2)异步
订阅者或接收者可以注册为一个消息监听器 。当消息到达之后,系统自动调用监听器的onMessage方法 。
JNDI:Java命名和目录接口,是一种标准的Java命名系统接口 。可以在网络上查找和访问服务 。通过指定一个资源名称,该名称对应于数据库或命名服务中的一个记录 , 同时返回资源连接建立所必须的信息 。
JNDI在JMS中起到查找和访问发送目标或消息来源的作用 。(架构KKQ:466097527 , 欢迎加入)
4.3JMS编程模型

推荐阅读