两者区别在于JMS和AMQP(此图取自别处),
JMS提供了两种消息模型,peer-2-peer(点对点)以及publish-subscribe(发布订阅)模型。当采用点对点模型时,消息将发送到一个队列,该队列的消息只能被一个消费者消费。而采用发布订阅模型时,消息可以被多个消费者消费。在发布订阅模型中,生产者和消费者完全独立,不需要感知对方的存在。
下图为Amq的消费情况 ,Amq本地搭建及其简单,Rmq还没有试过。

P2P消费

发送和消费代码相似,就是把createconsumer改为createProducer.

发布模式
publisher = (ActiveMQTopicPublisher) session.createPublisher(topic); publisher.setDeliveryMode(DeliveryMode.PERSISTENT) 订阅模式 subscriber = (ActiveMQTopicSubscriber) session.createDurableSubscriber(topic, "*"); subscriber.setMessageListener(this);
下图为RMQ的消费情况

RMQ和AMQ最大区别在于有 vhost 和exchange,routingkey这些区别。只有exchange 和routingkey相匹配,才会进行收发消息,不仅仅是队列名的匹配,



在rabbitmq中,exchange有4个类型:direct,topic,fanout,header。
Direct:将消息中的Routing key与该Exchange关联的所有Binding中的Routing key进行比较,如果相等,则发送到该Binding对应的Queue中。
Topic:将消息中的Routing key与该Exchange关联的所有Binding中的Routing key进行对比,如果匹配上了,则发送到该Binding对应的Queue中,*(星号):可以(只能)匹配一个单词#(井号):可以匹配多个单词(或者零个)
Fanout :直接将消息转发到所有binding的对应queue中,这种exchange在路由转发的时候,忽略Routing key。
Headers :将消息中的headers与该Exchange相关联的所有Binging中的参数进行匹配,如果匹配上了,则发送到该Binding对应的Queue中。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/203213.html原文链接:https://javaforall.net
