尝试试用了下rabbitmq ,比activemq 简单很多,客户端API很简洁。
先普及几个概念
AMQP
1.基本概念:
AMQP(消息队列协议,Advanced Message Queuing Protocol)是一种消息协议 ,等同于JMS,但是JMS只是java平台的方案,且只是API级别的一个协议,AMQP是一个跨语言的协议。AMQP允许来自不同供应商的消息生产者和消费者实现真正的互操作扩展,就如同SMTP、HTTP、FTP等协议采用的方式一样。
2.AMQP模型
交换器,队列,消息,绑定
2.1 交换器
交换器是消息送达的实体。他是具名的。
属性:
passive:交换器不在事先被声明,如果其不存在将抛出错误。
durable:该交换器将在broker重启后生效。
auto-delete:该交换器将在没有消息队列绑定时自动删除。一个从未绑定任何队列的交换器不会自动删除。
注意:AMQP 1.0规范将定义可移除的交换器。
2.2 队列
队列是接收消息的实体,具有名字和属性,但没有类型。客户端可以订阅队列以便使broker递送某消息队列的内容到该客户端。另,客户端也可自动到队列取他所感兴趣的消息。
消息确保以它被送往队列时的顺序分发。但在进行某些重新路由的操作如失效处理时,其顺序则不能保证。
属性:
alternate-exchange :当消息被订阅者拒绝或者由于队列被删除而孤立时则被送往此交换器,同时队列中的该消息被删除。
passive :当队列不存在时会抛出一个错误信息,仍然不会被声明。
durable :队列将在broker重启时启动。
exclusive :队列仅服务于一个客户端。
auto-delete :队列在没有活跃订阅者的时候将自动删除。这个类似于具有auto-delete属性的交换器:如果队列上从未有活动的订阅者则不会自动删除。当客户端终结时,exclusive类型的队列则一定会自动删除。
注意:AMQP 1.0中,队列将替代交换器。
2.3 消息
消息是不具名的。它被发布到交换器。它由消息头和消息体组成。消息体是不透明的,而消息头则由一系列的可选属性组成:
routing-key :该域的使用取决于交换器的类型。
immediate :如果至少一个队列可以接收,但却没有订阅者,则该消息将被当作无路由进行处理。
delivery-mode :指出该消息可能需要持久性存储。broker仅对此类消息在被消费前进行最大能力的防丢失措施。如果不能确定broker终结时消息是否投递成功则可能会发生消息被多次投递的情况。不具有这个属性的消息则不会如此。
priority :相对于其他消息的优先权,范围0至9.
expiration :消息在被broker当作不可路由处理前的存续时间,以毫秒为单位。
2.4 绑定
绑定是队列和交换器之间的关系,规定消息如何由交换器到队列。绑定的属性被交换器用来与路由算法匹配。绑定和交换器算法可组合形成各种情形:
Unconditional:绑定无任何属性,交换器请求所有的消息。
Conditional on a fixed string :绑定有一个属性routingkey,请求所有与此标识相符的消息。
Conditional on a pattern match :绑定有一个属性routingkey,请求所有与此标识的模式匹配的消息。可以使用通配符。AMQP实现了主题匹配模式。
Conditional on multiple fixed strings :绑定有一个属性表,请求所有与各个表项匹配的消息。各表项的条件可以是与、或。
Conditional on multiple patterns :绑定有一个属性表,请求所有与各个表项的模式匹配的消息。
Conditional on algorithmic comparison :绑定有一个算术表达式(类似SQL的SELECT WHERE语句),请求所有头部匹配此表达式的消息。
Conditional on content inspection :绑定指定通配符,请求所有消息实际内容与此条件相符的消息。
注意:这些并非全部是标准,取决于具体实现。
3.交换类型及对绑定的影响
以上4个实体形成了AMQP的基本模型。理解消息如何传递到队列的关键在于交换器的类型与路由关键字之间的关系。
当一个消息的路由关键字与绑定中的模式匹配时,交换器会把该消息的拷贝送达队列。如何进行匹配仅依赖于交换器的类型:
direct型 :消息的路由关键字与绑定相同。
fanout型 :总是匹配,即使绑定无关键字。
topic型 :匹配路由关键字属性,字符串的各个部分以'.'分隔。可包含两个特殊字符:'*'表示单个任意词,'#'表示0个或多个词,例如 *.stock.# 匹配usd.stock和eur.stock.db,但不匹配stock.nasdaq。
headers型 :匹配各个键-值对的逻辑组合结果。
其它由供应商自定义的交换器也被允许。
命名队列到命名交换器的绑定具有强大的属性——通过绑定使得这两个实体相互独立。例如,可以将同一个队列通过多个绑定连接到同一个或者多个交换器上。或者,多个消费者可以以相同的参数绑定到同一个队列上,这样每个消费者仅能得到其他消费者没有消费的消息。或者,多个消费者可以声明各自独立的队列但共享同一个绑定,如此,每个消费者都将得到与其他消费者相同的消息。
注意点:
AMQP 1.0规范草案改变了AMQP的模型:移除交换器和绑定的概念,代之以队列和链接。这变将导致2个问题:
1. 发布者需要知道接收者的拓扑,即何种交换器及其类型;
2. 生产者的流控:如果一个交换器对两个不同的队列进行路由,其中一个空闲而另一个近乎满载,那么如何流控进行呢?
tips:
QOS:(Quality of Service)即服务质量。对于网络业务,服务质量包括传输的带宽、传送的时延、数据的丢包率等。在网络中可以通过保证传输的带宽、降低传送的时延、降低数据的丢包率以及时延抖动等措施来提高服务质量。
QoS服务模型
通常QoS提供以下三种服务模型:
1.Best-Effort service(尽力而为服务模型)
Best-Effort服务模型Best-Effort是一个单一的服务模型,也是最简单的服务模型。对Best-Effort服务模型,网络尽最大的可能性来发送报文。但对时延、可靠性等性能不提供任何保证。
Best-Effort服务模型是网络的缺省服务模型,通过FIFO(first in first out 先入先出)队列来实现。它适用于绝大多数网络应用,如FTP、E-Mail等。
2.Integrated service(综合服务模型,简称Int-Serv)
Int-Serv服务模型Int-Serv是一个综合服务模型,它可以满足多种QoS需求。该模型使用资源预留协议(RSVP),RSVP运行在从源端到目的端的每个设备上,可以监视每个流,以防止其消耗资源过多。这种体系能够明确区分并保证每一个业务流的服务质量,为网络提供最细粒度化的服务质量区分。
3.Differentiated service(区分服务模型,简称Diff-Serv)
Diff-Serv服务模型Diff-Serv是一个多服务模型,它可以满足不同的QoS需求。与Int-Serv不同,它不需要通知网络为每个业务预留资源。区分服务实现简单,扩展性较好。
分享到:
相关推荐
首先,我们需要理解RabbitMQ的基本概念。RabbitMQ服务器作为消息的中转站,接收生产者发送的消息,并将其传递给消费者。生产者是发送消息的应用,而消费者则是接收消息的应用。中间的交换机(Exchange)负责根据路由...
14、尚硅谷-SpringBoot高级-消息-RabbitMQ基本概念简介 15、尚硅谷-SpringBoot高级-消息-RabbitMQ运行机制 16、尚硅谷-SpringBoot高级-消息-RabbitMQ安装测试 17、尚硅谷-SpringBoot高级-消息-RabbitTemplate发送...
【描述】:本篇主要介绍了消息中间件的基本概念、作用,以及RabbitMQ的起源和发展,同时提到了RabbitMQ的核心组件和概念。 【知识点详解】 1. **消息中间件**: - 消息中间件(Message Queue Middleware,MQ)是...
综上所述,通过本篇笔记的学习,读者可以全面掌握RabbitMQ的基本使用方法以及一些高级特性,这对于实际项目中的消息处理需求提供了强有力的支持。无论是简单的消息传输还是复杂的分布式系统架构设计,RabbitMQ都能...
首先,我们来了解一下RabbitMQ的基本概念。RabbitMQ是一个开源的消息代理和队列服务器,它基于AMQP(Advanced Message Queuing Protocol)协议工作,提供了一种可靠的消息传递机制。通过RabbitMQ,应用程序可以发送...
【RabbitMQ 学习资料】这篇文档是针对初学者准备的,主要涵盖了RabbitMQ的基本概念、消息队列的工作原理、AMQP和JMS的区别、常见消息中间件的对比,以及RabbitMQ的安装与配置,还有其提供的Web管理界面和基本功能。...
首先,我们需要了解RabbitMQ的基本概念。在RabbitMQ中,队列(Queue)是存储消息的地方,生产者(Producer)发送消息到队列,消费者(Consumer)从队列中接收并处理消息。绑定(Binding)则是定义消息从交换机...
本篇文章将详细介绍如何使用 RabbitMQ 结合 SpringBoot 来实现一个简单但完整的消息队列系统。我们将探讨以下关键知识点: 1. **RabbitMQ 基础概念**: - **交换机(Exchange)**:RabbitMQ 中的核心组件,负责...
**一、JMS基本概念** JMS(Java Message Service)是Java平台中用于进行异步消息传输的标准接口。它定义了两种主要的消息模型: 1. **Point-to-Point (P2P)**:点对点模型,消息被发送到一个特定的队列,由一个...
RabbitMQ的官方文档详细且全面,包括了安装部署、基本概念、高级特性等内容。 2. **在线课程**:网络上有许多关于RabbitMQ的视频教程和实战项目,通过实际案例的学习更容易理解抽象的概念。 3. **实践操作**:理论...
本篇将深入探讨RabbitMQ的基本概念、系统架构、消费原理以及其高级特性。 **1、基本概念** RabbitMQ是一个开源的消息代理和队列服务器,它基于AMQP(Advanced Message Queuing Protocol)协议工作。AMQP是一种标准...
在Linux环境中,RabbitMQ是一种广泛使用的开源消息队列系统,它基于AMQP(Advanced Message Queuing Protocol)协议实现。本篇文章将详细讲解如何在...在实际应用中,理解并熟练掌握其基本概念和操作是至关重要的。
#### 二、RabbitMQ基本概念 **2.1 RabbitMQ简介** RabbitMQ是一个开源的消息代理和队列服务器,由Erlang编写而成,基于AMQP (Advanced Message Queuing Protocol) 协议。AMQP是一种开放标准的应用层协议,用于实现...
这篇备忘录将主要探讨RabbitMQ的基本概念、安装与配置以及一些常见的使用场景。 首先,我们需要了解AMQP协议,它是应用层的开放标准,为异步消息传递提供了一个通用框架。RabbitMQ支持多种编程语言,如Java、Python...
1. **RabbitMQ基础**:首先需要理解RabbitMQ的基本概念,如交换机(Exchanges)、队列(Queues)和绑定(Bindings)。交换机负责将消息路由到适当的队列,队列是存储消息的地方,而绑定定义了交换机如何将消息路由到...
通过本篇介绍,我们不仅了解了Akka Scala的基本概念和核心优势,还深入探讨了其关键技术点,包括Actor系统、消息传递机制、配置与高级应用等。Akka Scala作为一种强大的并发编程工具,为构建高度可扩展、容错的...
1. PHP基本语法:介绍PHP的注释方式、变量声明、数据类型(如整型、浮点型、字符串、布尔型、数组、NULL)、常量与变量的作用域以及变量生命周期。 2. 流程控制:涵盖条件语句(if、else、switch)和循环结构(for...
这暗示了学习Spring Cloud的完整流程,从基本概念到高级实践。 1. **Java基础**:在Spring Cloud中,Java主要用于编写服务端应用程序,包括创建RESTful API、处理HTTP请求、数据持久化等。理解Java面向对象编程、类...
本篇文章将对消息中间件进行深入学习和概述,探讨其基本概念、工作原理以及相关协议。 首先,我们要理解什么是消息中间件。消息中间件(Message Queuing,MQ)是一种软件技术,它允许应用程序通过消息传递进行通信...
《ActiveMQ深度解析与实战应用》 ...掌握其基本概念和使用方法,有助于构建高可用、高性能的分布式系统。通过不断学习和实践,我们可以充分利用ActiveMQ的优势,优化系统架构,提升整体系统性能。