amqp

初探RabbitMQ系列(一)了解消息中间件的工作原理和使用

a 夏天 提交于 2019-12-01 03:41:47
文档章节 简介 消息与消息队列 性能对比 了解什么是AMQP协议? AMQP的协议模型 AMQP核心概念 AMQP消息路由 Exchange类型 RabbitMQ特点 RabbitMQ 中的概念模型 消息模型 RabbitMQ 基本概念 RabbitMQ的作用和使用场景 RabbitMQ的核心组件 Hello RabbitMQ World pom依赖 RabbitMQ web客户端 简介 目前,主流的消息中间件主要有:ActiveMQ、Kafka、RabbitMQ、RocketMQ等等......,而我们今天的主角是:RabbitMQ,RabbitMQ是一个开元基于 erlang 语言开发具有高可用高并发的优点,适合集群消息代理和队列服务器,它是基于AMQP协议来实现的,AMQP的和主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全,RabbitMQ支持多种语言,有消息确认机制和持久化机制,保证数据不丢失的前提做到可靠性、可用性。 消息与消息队列 消息(Message)是指应用于应用之间传送的数据,消息的类型包括文本字符串、JSON、XML、内嵌对象等等... 所谓 消息中间件 / 消息队列( Message Queue Middleware,简称MQ)是利用高效可靠的消息传递机制进行数据交流,同时可以基于数据通信来进行分布式系统的继承

Converting Message from RabbitMQ into string/json

丶灬走出姿态 提交于 2019-12-01 01:54:44
问题 I am currently struggling hard with a fair simple problem. I want to receive a message from RabbitMQ and have that transformed into a string (or later a json object). But all I get is bytes. The Message object displays itself as a string that way (Body:'{"cityId":644}'; ID:null; Content:application/json; Headers:{}; Exchange:; RoutingKey:pages.type.index; Reply:null; DeliveryMode:NON_PERSISTENT; DeliveryTag:1) The configuration class (using spring) @Configuration public class

AMQP 0-9-1 vs 1-0

你说的曾经没有我的故事 提交于 2019-12-01 00:59:16
问题 I am looking for a messaging service for a new project that will have to interface some C# applications with some Java applications. I really like RabbitMQ because it seems to have amazing support for both technologies. I see in the RabbitMQ specs that at the moment only AMQP 0-9-1 model is provided. Is that a show stopper? Should I maybe address to ActiveMQ which provides AMQP 1.0? Thanks for your advice 回答1: Your question is perfectly addressed in the official protocol overview: AMQP 1.0

How to add a header key:value pair when publishing a message with pika

岁酱吖の 提交于 2019-12-01 00:34:45
问题 I am writing an automated test to test a consumer. So far I did not need to include a header when publishing messages but now I do. And it seems like its lacking documentation. This is my publisher: class RMQProducer(object): def __init__(self, host, exchange, routing_key): self.host = host self.exchange = exchange self.routing_key = routing_key def publish_message(self, message): connection = pika.BlockingConnection(pika.ConnectionParameters(self.host)) channel = connection.channel() message

RabbitMQ指南

一笑奈何 提交于 2019-11-30 23:02:07
原文地址:http://www.blogjava.net/qbna350816/archive/2016/06/04/430771.html 官网指南-RabbitMQ-Java Client API Guide 概述 RabbitMQ Java client 将 com.rabbitmq.client作为其顶层包 . 关键类和接口有: Channel Connection ConnectionFactory Consumer 协议操作可通过 Channel接口来进行.Connection用于开启c hannels,注册connection生命周期事件处理, 并在不需要时关闭connections. Connections是通过 ConnectionFactory来初始化的,在ConnectionFactory中,你可以配置不同的connection设置,如:虚拟主机和用户名等等 . Connections 和 Channels 核心API类是 Connection和 Channel , 它们代表对应AMQP 0-9-1 connection 和 channel. 在使用前,可像下面这样来导入: import com.rabbitmq.client.Connection; import com.rabbitmq.client.Channel; 连接到broker

RabbitMQ消息监听异常问题探究

与世无争的帅哥 提交于 2019-11-30 22:54:23
问题场景 在使用Spring RabbitMQ做消息监听时,如果监听程序处理异常了,且未对异常进行捕获,会一直重复接收消息,然后一直抛异常。为了更好的描述问题,下面写个简单的例子。 通过访问null对象来引发空指针异常,消息监听处理程序代码清单: package amqp; import org.springframework.amqp.core.Message; import org.springframework.amqp.core.MessageListener; import org.springframework.stereotype.Component; @Component public class FooMessageListener implements MessageListener { @Override public void onMessage (Message message) { String messageBody = new String(message.getBody()); System.out.println( " [x] Received '" + messageBody + "'" ); String nullStr = null ; nullStr.toString(); } } 往消息监听队列发送一条消息,控制台不停打印异常日志:

译: 1. RabbitMQ Spring AMQP 之 Hello World

吃可爱长大的小学妹 提交于 2019-11-30 22:32:52
本文是译文,原文请访问: http://www.rabbitmq.com/tutorials/tutorial-one-spring-amqp.html RabbitMQ 是一个Brocker (消息队列服务器),它接受和转发消息 . 你可以将它当做邮局: 当你将要发布的邮件放在邮箱中时,您可以确定邮件先生或Mailperson女士最终会将邮件发送给您的收件人。在这个比喻中,RabbitMQ是邮箱,邮局和邮递员。 RabbitMQ和邮局之间的主要区别在于它不处理信纸,而是接受,存储和转发二进制大对象 blob(binary large object )数据 —— 消息 0x01 RabbitMQ和一般的消息传递使用了一些术语 1. 生产者 生产者仅仅只是发送。一个发送消息的程序就是生产者: 2. 队列 队列 是RabbitMQ中的邮箱的名称。 虽然消息流经RabbitMQ和您的应用程序,但它们只能存储在 队列中 。 甲 队列 仅由主机的存储器和磁盘限制约束,它本质上是一个大的消息缓冲器。 许多 生产者 可以发送到一个队列的消息,并且许多 消费者 可以尝试从一个 队列 接收数据 。 这就是我们代表队列的方式: 3. 消费者 消费这与生产者 有类似的意义。 一个 消费者 是一个程序,主要是等待接收信息: 请注意,生产者,消费者和代理不必驻留在同一主机上; 实际上在大多数应用中他们没有

消息队列--RabbitMQ基础

两盒软妹~` 提交于 2019-11-30 22:12:27
文章目录 一、什么是消息队列? 二、什么是AMQP? 三、交换器类型 3.1-Direct 3.2-Fanout 3.3-Topic 3.4-默认交换机 四、RabbitMQ安装(linux) 五、FAQ 一、什么是消息队列? 消息队列(MessageQueue),简称MQ,FIFO,即先进先出,是一种为了解决“逻辑解耦+物理解耦”的消息通信服务。 MQ是一种系统间相互协作的通信机制, 在系统解耦、流量削峰、日志收集、保持事务一致性等方便都会有很大帮助,一个典型的消息队列,如下图所示: Broker:消息处理中心,负责消息的接受、存储、转发; Producer:消息生产者,负责产生和发送消息到消息处理中心; Consumer:消息消费者,负责从消息处理中心获取消息,并进行相应的处理; 二、什么是AMQP? AMQP(Advanced Message Queue Protocol)是一种用于实现消息队列所涉及的协议,常见的协议有AMQP、MQTT、STOMP、XMPP等。RabbitMQ是一个由erlang开发的AMQP的开源实现。官网地址: RabbitMQ官网地址 先了解一下AMQP协议的基本概念: Message(消息):消息服务器处理数据的原子单元。消息包括一个内容头、一组属性和一个内容体。消息可以被存储到硬盘中,本身有优先级; Publisher(消息生产者)

SpringBoot高级——消息中间件

半城伤御伤魂 提交于 2019-11-30 21:53:43
一、概述  1、大多应用中,可通过消息服务中间件来提升系统异步通信、扩展解耦能力  2、消息服务中的两个重要概念:消息代理(message broker,即消息中间件服务器)和目的地(destination)   当消息发送者发送消息以后,将由消息代理接管,消息代理保证消息传递到指定目的地。  3、消息队列主要有两种形式的目的地   队列(queue):点对点消息通信(point-to-point)    消息发送者发送消息,消息代理将其放入一个队列中,消息接收者从队列中获取消息内容,消息读取后被移出队列    消息只有唯一的发送者和接受者,但并不是说只能有一个接收者,这是因为消息一旦被消费就会从队列中移除   主题(topic):发布(publish)/订阅(subscribe)消息通信    发送者(发布者)发送消息到主题,多个接收者(订阅者)监听(订阅)这个主题,那么就会在消息到达时同时收到消息,不同于点对点的方式,在点对点的方式中一旦一个接收者处理了消息,消息就会被移除,那么其他的接收者就不会再去处理,而订阅的方式则是所有的接收者都会对该消息做出相应处理 二、使用场景  1、异步处理   在用户注册时给用户发送短信和邮件,但是短信和邮件并不需要在注册成功已完成就发送,因此可以异步处理  2、应用解耦  3、流量削峰   比如秒杀:在10万个客户秒杀1万个商品的时候

消息队列-Rabbitmq处理消息及在Spring中的应用

血红的双手。 提交于 2019-11-30 21:39:46
消息队列-Rabbitmq 1. 什么是消息队列 2. AMQP和JMS 3. 常见MQ产品 4. RabbitMQ 4.1 五种消息模型 4.1.1 基本消息模型 4.1.2 work消息模型 4.1.3 订阅模型分类 4.1.3.1 订阅模型-Fanout 4.1.3.2 订阅模型-Direct 4.1.3.3 订阅模型-Topic 5. 处理消息丢失的几种方法 5.1 消费者的ACK机制 5.2 持久化 5.3 生产者确认机制 6. Spring AMQP 6.1 简介 6.2 依赖和配置 6.3 监听者 6.4 AmqpTemplate 6.5 测试代码 1. 什么是消息队列 消息队列,即MQ,Message Queue。 消息队列是典型的:生产者、消费者模型。生产者不断向消息队列中生产消息,消费者不断的从队列中获取消息。因为消息的生产和消费都是异步的,而且只关心消息的发送和接收,没有业务逻辑的侵入,这样就实现了生产者和消费者的解耦。 消息队列的主要特点是异步处理,主要目的是减少请求响应时间和解耦。 2. AMQP和JMS MQ是消息通信的模型,并发具体实现。现在实现MQ的有两种主流方式:AMQP、JMS。 两者间的区别和联系: JMS是定义了统一的接口,来对消息操作进行统一;AMQP是通过 规定协议 来统一数据交互的格式 JMS限定了必须使用Java语言;AMQP只是协议