Action MQ 初步学习
Apache 产下产品 ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 说明可以嵌套java使用和javaee
消息队列 是什么? 为什么要用消息队列? 有什么好处? 内部构造是什么?.........
消息队列:是在消息的传输过程中保存消息的容器
为什么要用消息队列:主要原因是由于在高并发环境下,由于来不及同步处理,请求往往会发生堵塞,比如说,大量的insert,
update之类的请求同时到达MySQL,直接导致无数的行锁表锁,甚至最后请求会堆积过多,从而触发too many connections错误。通
过使用消息队列,我们可以异步处理请求,从而缓解系统的压力。
使用环境:淘宝的秒杀活动,大量注册成功消息推送提醒,或则游戏里的奖品邮件的放松
有什么特点及好处:
⒈ 多种语言和协议编写客户端。语言: 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,进行测试
主要是解决高并发问题,减轻服务器的压力
内部构造:
消息队列分为两模式:(摘抄)
P2P(Point to Point),Publish/Subscribe(Pub/Sub)。
P2P模式包含三个角色:消息队列(Queue),发送者(Sender),接收者(Receiver)。每个消息都被发送到一个特定的队列,接收者
从队列中获取消息。队列保留着消息,直到他们被消费或超时。
P2P的特点
每个消息只有一个消费者(Consumer)(即一旦被消费,消息就不再在消息队列中)
发送者和接收者之间在时间上没有依赖性,也就是说当发送者发送了消息之后,不管接收者有没有正在运行,它不会影响到消息被发送到队列接收者在成功接收消息之后需向队列应答成功
如果希望发送的每个消息都会被成功处理的话,那么需要P2P模式。
包含三个角色主题(Topic),发布者(Publisher),订阅者(Subscriber) 多个发布者将消息发送到Topic,系统将这些消息传递给多个订阅者。
Pub/Sub的特点
每个消息可以有多个消费者
发布者和订阅者之间有时间上的依赖性。针对某个主题(Topic)的订阅者,它必须创建一个订阅者之后,才能消费发布者的消息为了消费消息,订阅者必须保持运行的状态
为了缓和这样严格的时间相关性,JMS允许订阅者创建一个可持久化的订阅。这样,即使订阅者没有被激活(运行),它也能接收到发布者的消息。
如果希望发送的消息可以不被做任何处理、或者只被一个消息者处理、或者可以被多个消费者处理的话,那么可以采用Pub/Sub模型。
4.2消息消费
在JMS中,消息的产生和消费都是异步的。对于消费来说,JMS的消息者可以通过两种方式来消费消息。
(1)同步
订阅者或接收者通过receive方法来接收消息,receive方法在接收到消息之前(或超时之前)将一直阻塞;
(2)异步
订阅者或接收者可以注册为一个消息监听器。当消息到达之后,系统自动调用监听器的onMessage方法。
何为消息队列的同步和异步?
这里明确声明下 不要和前端ajax的同步异步 和多线程的同步和异步搞混啦
同步,异步:原理和多线成同步,异步原理机制一样 不同点 使用环境
同步:主要还是线程发生阻塞;等待完成才继续;在消息队列中,消费者的同步模式一直是处于堵塞状态,一直处于等待接受生产
者发来的数据,不能做其他的业务。且完成接受并处理完生产者发来的数据 才可以接受下一个生产者的数据!
异步:在消息队列中,消费者是监听生产者的消息,有就处理,没有就做其他的业务;两不耽误;者发来的数据,不能做其他的业务。且完成接受并处理完生产者发来的数据 才可以接受下一个生产者的数据!
但在消息队列中,生产者的模式都是异步模式的;比如生产者登录一个网站平台,并注册了账户。他便可以去操做其他事项啦;不用等待接受后端注册成功确认消息后,才可以去操作其他的;(数据量高并发的情况下);
提示下 生产者发送的数据,也有持久化和不持久化之分:编码部分了解
在P2P类型中当DeliveryMode设置为NON_PERSISTENCE时,消息被保存在内存中,而当DeliveryMode设置为PERSISTENCE时,消息保存
在broker的相应的文件或者数据库中。而且P2P中消息一旦被Consumer消费就从broker中删除。
对AMQ消息队列有个初步了解了吧
本人觉得AMQ和redis 对于电商项目 有很好的架构模式
Apache 产下产品 ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 说明可以嵌套java使用和javaee
消息队列 是什么? 为什么要用消息队列? 有什么好处? 内部构造是什么?.........
消息队列:是在消息的传输过程中保存消息的容器
为什么要用消息队列:主要原因是由于在高并发环境下,由于来不及同步处理,请求往往会发生堵塞,比如说,大量的insert,
update之类的请求同时到达MySQL,直接导致无数的行锁表锁,甚至最后请求会堆积过多,从而触发too many connections错误。通
过使用消息队列,我们可以异步处理请求,从而缓解系统的压力。
使用环境:淘宝的秒杀活动,大量注册成功消息推送提醒,或则游戏里的奖品邮件的放松
有什么特点及好处:
⒈ 多种语言和协议编写客户端。语言: 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,进行测试
主要是解决高并发问题,减轻服务器的压力
内部构造:
消息队列分为两模式:(摘抄)
P2P(Point to Point),Publish/Subscribe(Pub/Sub)。
P2P模式包含三个角色:消息队列(Queue),发送者(Sender),接收者(Receiver)。每个消息都被发送到一个特定的队列,接收者
从队列中获取消息。队列保留着消息,直到他们被消费或超时。
P2P的特点
每个消息只有一个消费者(Consumer)(即一旦被消费,消息就不再在消息队列中)
发送者和接收者之间在时间上没有依赖性,也就是说当发送者发送了消息之后,不管接收者有没有正在运行,它不会影响到消息被发送到队列接收者在成功接收消息之后需向队列应答成功
如果希望发送的每个消息都会被成功处理的话,那么需要P2P模式。
包含三个角色主题(Topic),发布者(Publisher),订阅者(Subscriber) 多个发布者将消息发送到Topic,系统将这些消息传递给多个订阅者。
Pub/Sub的特点
每个消息可以有多个消费者
发布者和订阅者之间有时间上的依赖性。针对某个主题(Topic)的订阅者,它必须创建一个订阅者之后,才能消费发布者的消息为了消费消息,订阅者必须保持运行的状态
为了缓和这样严格的时间相关性,JMS允许订阅者创建一个可持久化的订阅。这样,即使订阅者没有被激活(运行),它也能接收到发布者的消息。
如果希望发送的消息可以不被做任何处理、或者只被一个消息者处理、或者可以被多个消费者处理的话,那么可以采用Pub/Sub模型。
4.2消息消费
在JMS中,消息的产生和消费都是异步的。对于消费来说,JMS的消息者可以通过两种方式来消费消息。
(1)同步
订阅者或接收者通过receive方法来接收消息,receive方法在接收到消息之前(或超时之前)将一直阻塞;
(2)异步
订阅者或接收者可以注册为一个消息监听器。当消息到达之后,系统自动调用监听器的onMessage方法。
何为消息队列的同步和异步?
这里明确声明下 不要和前端ajax的同步异步 和多线程的同步和异步搞混啦
同步,异步:原理和多线成同步,异步原理机制一样 不同点 使用环境
同步:主要还是线程发生阻塞;等待完成才继续;在消息队列中,消费者的同步模式一直是处于堵塞状态,一直处于等待接受生产
者发来的数据,不能做其他的业务。且完成接受并处理完生产者发来的数据 才可以接受下一个生产者的数据!
异步:在消息队列中,消费者是监听生产者的消息,有就处理,没有就做其他的业务;两不耽误;者发来的数据,不能做其他的业务。且完成接受并处理完生产者发来的数据 才可以接受下一个生产者的数据!
但在消息队列中,生产者的模式都是异步模式的;比如生产者登录一个网站平台,并注册了账户。他便可以去操做其他事项啦;不用等待接受后端注册成功确认消息后,才可以去操作其他的;(数据量高并发的情况下);
提示下 生产者发送的数据,也有持久化和不持久化之分:编码部分了解
在P2P类型中当DeliveryMode设置为NON_PERSISTENCE时,消息被保存在内存中,而当DeliveryMode设置为PERSISTENCE时,消息保存
在broker的相应的文件或者数据库中。而且P2P中消息一旦被Consumer消费就从broker中删除。
对AMQ消息队列有个初步了解了吧
本人觉得AMQ和redis 对于电商项目 有很好的架构模式