`
y806839048
  • 浏览: 1121447 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

ActiveMq和RabbitMq区别及其解析

阅读更多

总括:

 

 

activemq与rabbitmq本质区别在于jms与amqp

 

activemq:  jms ---不夸平台 ----可用字节码传输,也可用json当做message的消息体

java写可以jar集成

crete  send  receive

只有failover功能,即我连一个失败了,可以切换到其他的broker上。这一点貌似不太科学

 

rabbitmq:amQp   ---跨平台----用字节码传输

erlang写

basicProduct

basicConsume

高性能,高可用,量数据,以插件的形式配合spring更灵活

集群可以多样化,可以queue分片式的集群,也可冗余性的集群

 

跨平台原因

AMQP为消息定义了线路层(wire-level protocol)的协议,而JMS所定义的是API规范。JMS的API协议能够确保所有的实现都能通过通用的API来使用,但是并不能保证某个JMS实现所发送的消息能够被另外不同的JMS实现所使用。而AMQP的线路层协议规范了消息的格式,消息在生产者和消费者间传送的时候会遵循这个格式。这样AMQP在互相协作方面就要优于JMS——它不仅能跨不同的AMQP实现,还能跨语言和平台。

 

 

消息的提供者---exchanger---binding(rounting-key---queue)---客户端

 

提供者发送消息的时候会带入rounting-key就是队名,客户端直接订阅队列

exchanger中的rounting-key和bing中的key可以匹配到就把消息放入这个queue

vhost---相当于vip对应多个realip---可以使得一组应用用一组集群

 

具体:

 

1.ActiveMq,传统的消息队列,使用Java语言编写。基于JMS(Java Message Service),采用多线程并发,资源消耗比较大。支持P2P和发布订阅两种模式。

2.RabbitMQ,基于AMQP协议实现,支持多种场景,社区活跃量大。高性能,高可用,支持海量数据。

 

两者区别在于JMS和AMQP(此图取自别处),

 

 JMS提供了两种消息模型,peer-2-peer(点对点)以及publish-subscribe(发布订阅)模型。当采用点对点模型时,消息将发送到一个队列,该队列的消息只能被一个消费者消费。而采用发布订阅模型时,消息可以被多个消费者消费。在发布订阅模型中,生产者和消费者完全独立,不需要感知对方的存在。

 

在AMQP中,消息路由(messagerouting)和JMS存在一些差别,在AMQP中增加了Exchange和binding的角色。producer将消息发送给Exchange,binding决定Exchange的消息应该发送到那个queue,而consumer直接从queue中消费消息。queue和exchange的bind有consumer来决定。(https://blog.csdn.net/hpttlook/article/details/23391967)

 

 

下图为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相匹配,才会进行收发消息,不仅仅是队列名的匹配,

Virtual host: 出于多租户和安全因素设计的,把AMQP的基本组件划分到一个虚拟的分组中,类似于网络中的namespace概念。当多个不同的用户使用同一个RabbitMQ server提供的服务时,可以划分出多个vhost,每个用户在自己的vhost创建exchange/queue等。

 

 

 

 

 

在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://blog.csdn.net/CLG_CSDN/article/details/90021459 

 

分享到:
评论

相关推荐

    ActiveMQ 代码

    ActiveMQ 和其他消息队列如Microsoft MSMQ(微软消息队列)及RabbitMQ相比,各有特点。MSMQ是微软提供的企业级消息队列服务,主要用于Windows环境,而RabbitMQ是一款基于AMQP协议的多语言消息队列,支持多种编程语言...

    《Java中间件技术及其应用开发》-李华飚-源代码

    2. **消息中间件**:如ActiveMQ、RabbitMQ,用于异步处理和解耦应用组件,实现消息队列的高效传输。 3. **缓存中间件**:如Redis、Memcached,用于提高数据读取速度,减轻数据库压力,通常用于存储热点数据。 4. *...

    RabbitMQ技术总结

    本文对消息队列的基本概念进行了概述,重点介绍了AMQP协议及其核心组件,并对RabbitMQ进行了深入探讨,包括其与其它队列系统的对比及安装测试方法。通过学习这些知识,开发者可以更好地理解消息队列的工作原理,并...

    Java面试题库与答案解析

    6. **消息队列MQ**:了解ActiveMQ、RabbitMQ、Kafka等MQ的使用,理解消息模型(点对点、发布/订阅),以及在高并发场景下如何通过MQ解耦系统。 7. **数据库**:熟悉SQL语言,理解关系型数据库(如MySQL、Oracle)和...

    Java软件工程师面试笔试题.docx

    1. 消息中间件:如ActiveMQ、RabbitMQ,负责异步消息传递。 2. 事务处理中间件:如Tuxedo、WebLogic Server,确保事务的一致性和完整性。 3. 对象中间件:如CORBA、JMS,支持分布式对象的创建、定位和通信。 4. 数据...

    spring-5.2.19.RELEASE-schema.zip

    Spring提供了JmsTemplate和MessageListener容器,使得在Spring应用中集成消息中间件如ActiveMQ、RabbitMQ等变得简单。 5. **cache**: 这个模块实现了缓存抽象,支持各种缓存解决方案,如 EhCache、Guava Cache 和 ...

    CMPP3.0网关协议(JAVA版)

    - **消息队列**:为保证高并发处理,可能需要使用消息队列来暂存待发送或待处理的请求,如ActiveMQ或RabbitMQ。 - **安全性**:实现鉴权机制,如使用Shared Secret或证书进行身份验证,以及数据加密,保障通信安全...

    java面试知识点整理.zip

    - ActiveMQ、RabbitMQ、Kafka的特性比较。 - Kafka的分区、消费者组、高吞吐量设计。 - 消息确认机制与幂等性设计。 7. **Kafka**: - Kafka的架构:Producer、Broker、Consumer。 - Kafka的特点:高吞吐、低...

    jt11日常笔记

    如Apache ActiveMQ、RabbitMQ、ZeroMQ和Kafka等,它们各有优势。ZeroMQ适合于高性能的Linux环境,而Kafka则在大数据处理方面表现出色。 #### 五、RabbitMQ详解 - **安装与配置**:RabbitMQ基于Erlang语言开发,支持...

    Spring核心知识点

    JMS模块支持与消息中间件集成,如ActiveMQ、RabbitMQ等。 - **消息发送**:简化了消息发送的过程,使得消息传递更加简单。 - **消息接收**:提供了接收消息的API,可以方便地处理接收到的消息。 ###### 1.2.5 ...

    Java面试题、MQ、JVM.zip

    常见的MQ产品有RabbitMQ、ActiveMQ、Kafka等。面试中可能会问到MQ的工作原理、发布/订阅模式与队列模式的区别、如何保证消息的可靠传递、如何处理消息的顺序性以及MQ在高并发场景下的应用。 最后,Java虚拟机(JVM...

    mvctest.zip

    在SpringMVC+MyBatis的环境中,我们可以利用RabbitMQ、ActiveMQ或Kafka等MQ实现消息传递,将耗时的操作放到后台处理,从而改善用户体验。 当涉及到事务管理时,Spring提供了声明式事务的支持,使得开发者可以在不...

    消息和主题(持久化-非持久化)分类--持久化订阅

    结合这些信息,我们可以预期这篇博客可能详细解析了消息和主题的持久化与非持久化订阅的概念,以及如何在实际开发中通过源码配置这些特性,可能还涉及到了使用Maven构建项目,并提供了具体的代码示例。对于想要深入...

    Java项目开发全程实例

    还可能使用到消息队列(MQ),如RabbitMQ或ActiveMQ,以提高系统的并发处理能力和解耦。另外,可能会用到WebSocket协议,提供持久化的双向通信。 第三章:企业人事管理系统 人事管理系统通常包含员工信息管理、考勤...

    spring的开发包

    它提供了灵活的请求映射、视图解析、数据绑定、模型和视图分离等功能。 6. **Spring Boot**:Spring Boot是近年来非常流行的快速开发工具,它简化了Spring应用的初始设置,提供了内置的服务器、自动配置和起步依赖...

    Java面试题库大全(全方位覆盖无死角)

    10. **消息MQ**:RabbitMQ、Kafka、ActiveMQ等消息队列的原理、使用场景及其实现的分布式消息传递协议(如AMQP)是面试中的难点。 掌握以上知识点,不仅能够帮助开发者在面试中脱颖而出,也是在实际工作中解决问题...

    spring-integration-study:弹簧集成示例

    3. JMS集成:通过ActiveMQ或RabbitMQ实现消息中间件的集成,展示消息生产者和消费者。 4. HTTP客户端和服务端:创建HTTP端点,实现Web服务的调用和响应。 5. 流程控制:通过Router、Filter、Splitter和Aggregator...

    2021年JAVA核心知识点整理.rar

    消息队列如RabbitMQ、Kafka、ActiveMQ等,用于解耦系统、削峰填谷: 1. **消息模型**:点对点、发布/订阅模型的理解及其应用场景。 2. **消息确认机制**:确保消息的可靠传递。 3. **消息中间件**:了解其主要...

    计算机的毕业论文题目大全.pdf

    - 消息队列:RabbitMQ, ActiveMQ - 实时同步与推送技术 以上只是部分论文题目涉及的知识点,每个题目都需要深入研究相关技术和理论,并结合实际项目进行实践,以满足毕业论文的要求。在编写论文过程中,学生应...

Global site tag (gtag.js) - Google Analytics