amqp

认识一下 RabbitMQ

♀尐吖头ヾ 提交于 2020-02-27 08:10:03
分布式系统中,如何在各个应用之间高效的进行通信,是系统设计中的一个关键。 使用 消息代理(message broker) 是一个优雅的解决方案。 RabbitMQ 就是一个被广泛应用的消息代理,遵循 AMQP协议 。 接下来我们就了解一下: Message Broker 概念 AMQP 协议的核心构成 消息转发的 4 种模式 1. Message Broker broker 是经纪人的意思,促成卖方、买方的交易,例如房产经纪人。 消息模型中,有消息的生产者、消费者,就相当于卖方、买方。 所以,也需要一个消息经纪人,这就引出了 message broker 的概念。 message broker 从生产者接收消息,再发送给消费者,这样,生产者、消费者可以完全隔离。 RabbitMQ 就是一个 message broker 。 2. AMQP 具体如何传递消息?要看使用的消息协议。 RabbitMQ 支持多种协议,其中最重要的是 AMQP (Advanced Message Queuing Protocol)。 AMQP 的概念模型很简单,包含3个部分: Queue Binding Exchange 当一个消息发布到 RabbitMQ 后,首先到达 Exchange,然后 Exchange 把消息分配给 Queue,消费者从 Queue 中得到消息。 AMQP 是一个可编程的协议

php rabbitmq 库 php-amqplib 运行 demo

时光总嘲笑我的痴心妄想 提交于 2020-02-27 06:42:43
下载项目 php-amqplib 项目地址: https://github.com/php-amqplib/php-amqplib 下载项目: $ git clone https://github.com/php-amqplib/php-amqplib.git $ cd php-amqplib 注:需要安装好 composer( Linux 安装 php composer ) 更新依赖: $ composer update 时间可能比较长,请耐心等待。执行完成后,会出现 vender 目录。 测试 修改配置文件 tests/config.php ,把 HOST、PORT、USER、PASS、VHOST 这几项都改为自己 rabbitmq 的。 修改 demo/config.php ,关闭调试信息,注释掉: putenv('TEST_AMQP_DEBUG=1'); 发送消息: $ php amqp_publisher.php some text to publish 接收消息: php amqp_consumer.php 可以运行多个 consumer,实现消费负载均衡。 来源: oschina 链接: https://my.oschina.net/yogoup/blog/3166987

消息中间件 二 之AMQP实战

寵の児 提交于 2020-02-26 22:19:17
实例分析 前面我们看了AMQP说明文档, 对AMQP有了大体的了解, 本文从实例出发再过一遍AMQP的基本操作. 准备 环境 RabbitMQ server 3.7.16 RabbitMQ client 5.7.3 客户端代码使用的是RabbitMQ官网教程, 如下: public static void main(String[] args) throws IOException, TimeoutException { ConnectionFactory factory = new ConnectionFactory(); factory.setHost("localhost"); try (Connection connection = factory.newConnection(); Channel channel = connection.createChannel();) { boolean durable = true; channel.queueDeclare(QUEUE_NAME, durable, false, false, null); String message = String.join(" ", "dMessage......."); channel.exchangeDeclare("mind", "direct"); channel

消息中间件 一 之 AMQP译文(上)

六眼飞鱼酱① 提交于 2020-02-26 21:34:53
RabbitMQ是AMQP的实现成果, 所以在研究RabbitMQ之前, 不如先看看协议本身. 1 Overview 概述 1.1 Goals of This Document 文档目标 本文档定义了网络协议AMQP, 客户端可以使用该协议与消息中间件服务器进行通信. 我们面向的是在本领域有一定经验的技术人员, 我们会提供充分的文档, 工程师可以通过这些文档使用任何高级语言或者硬件平台构建解决方案. 1.2 Summary 概述 1.2.1 Why AMQP 为什么用AMQP AMQP提供了完整的方法支持客户端和消息中间件服务器之间通信的操作. 我们希望开发和使用都使用标准化的消息中间件技术, 这样会降低企业的花销和系统集成的成本, 而且会为大众提供一个企业级的集成服务. 我们的目标是通过AMQP消息中间件可以驱动网络本身, 而且通过消息中间件可以开发出新的有用的应用. 1.2.2 Scope of AMQP 为了完成一个完整功能的消息中间件需要两方面的支持, 详细的网络协议和服务端服务. 因此AMQP在这两方面做了如下定义: 1 AMQ模型是定义的一套消息处理操作, 它包含了一套在服务端处理消息路由和消息存储的组件, 以及关联这些组件的规则. 2 AMQP是一个wire-level(?)的网络协议, 它允许客户端应用和服务端进行通信, 而且可以通过自己实现的AMQ模型进行交互.

AMQP(高级消息队列协议)协议模型

自古美人都是妖i 提交于 2020-02-26 15:06:00
Server:又称broker,接收客户端的连接,实现AMQP实体服务。 Connection:连接,应用程序与broker的网络连接。 Channel:网络信道,几乎所有的操作都在channel中进行,channel是进行消息读写的通道,客户端可建立多个channel,每个channel代表一个会话任务。(拿到连接之后创建channel) Message:消息,服务器和应用程序之间传送的数据,由Properties和Body组成。Properties可以对消息进行修饰,比如消息的优先级,延迟等高级特性;Body则就是消息体内容。 Virtual host:虚拟地址,用于进行逻辑隔离,最上层的消息路由。一个Virtual Host里面可以有若干个exchange和queue,同一个virtual host里面不能有相同名称的exchange和queue。 Exchange:交换机,接收消息,根据路由键转发消息到绑定的队列。 Binding:exchange和queue之间的虚拟连接,binding中可以包换routing key。 Routing key:一个路由规则,虚拟机可用它来确定如何鲁有一个特定消息。 queue:也成为Message Queue,消息队列,保存消息并将他们转发给消费者。 简单流程图: Routing key的作用: 来源: oschina 链接:

Django-设置预定作业?

梦想的初衷 提交于 2020-02-26 14:03:25
我一直在使用Django开发网络应用程序,并且很好奇是否有一种方法可以安排作业定期运行。 基本上,我只是想遍历数据库并定期自动进行一些计算/更新,但是我似乎找不到任何有关此操作的文档。 有人知道如何设置吗? 需要说明的是:我知道我可以设置 cron 作业来执行此操作,但是我很好奇Django中是否有某些功能可以提供此功能。 我希望人们能够自己部署此应用程序,而无需进行大量配置(最好为零)。 我已经考虑过通过简单地检查自从上次将请求发送到站点以来是否应该运行作业来“追溯地”触发这些操作,但是我希望有一些清洁的方法。 #1楼 Celery 是基于AMQP(RabbitMQ)构建的分布式任务队列。 它还以cron类的方式处理周期性任务(请参阅 周期性任务 )。 根据您的应用程序,可能值得一试。 用django( docs )设置Celery非常容易,并且在停机的情况下,定期任务实际上会跳过错过的任务。 如果任务失败,Celery还具有内置的重试机制。 #2楼 将以下内容放在cron.py文件的顶部: #!/usr/bin/python import os, sys sys.path.append('/path/to/') # the parent directory of the project sys.path.append('/path/to/project') # these

一男子激动地安装了RabbitMQ,看完博文后笑容没了

 ̄綄美尐妖づ 提交于 2020-02-26 11:46:27
一个事物总是会关联着很多事物。 要了解RabbitMQ,先了解 AMQP,要了解AMQP,先了解MQ。 (1)MQ Message Queue 消息队列,简称MQ,用于跨进程之间的上下游非实时通信。此处的上下游是平行关系。 MQ适用场景:上下游之间需要进行低频、非实时通信、上下游之间业务不相互依赖。 MQ不适用场景:高频、实时、上下游相互依赖、耦合。此时用方法调用的方式。(方法调用或远程调用)。 MQ是一种技术的统称。 (2) AMQP 一种应用层协议,专用用于消息通信,算是一个RFC标准(HTTP1.1 定义在RFC2616中)。应用层协议不需要了解太多。只需要了解OSI七层模型中,TCP和UDP 位于传输层,基于TCP/UDP之上的协议后来都是应用层协议。 这些协议的区别在我看来无非就是长连接、短链接,报文协议格式不同而已。既如此,理解HTTP就够了。AMQP、RSTP、MQTT、FTP、WebSocket、SMTP... 这些协议,有需求再去理解。一般也不用去理解,会有对应的框架和技术来屏蔽各种协议,让你面向对象或者面向API开发。 AMQP是一种通信协议。 (3)RabbitMQ Tomcat,Nginx,Apache 都按照HTTP协议去实现,所以它们的相同点就是都是HTTP服务器。RabbitMQ是一种实现了AMQP协议的软件程序。自然叫做消息服务器

ActiveMQ学习之通讯协议

只谈情不闲聊 提交于 2020-02-26 09:42:45
一、支持的通讯协议 ActiveMQ支持的client-broker通讯协议有:TCP、NIO、UDP、SSL、HTTP(S)、VM 其中配置Transport Connector的文件在ActiveMQ安装目录的conf/activemq.xml中的<TransportConnectors>标签内 上图中给出的配置信息中 url描述信息的头部都是采用协议名称:例如上图给出的 描述amqp协议的监听端口时,采用的url描述格式为“amqp://........” 描述stomp协议的监听端口时,采用的url描述格式为“stomp://........” 唯独在进行openwire协议进行描述时,url头部采用的是"tcp://........"这是因为activeMQ中默认的消息协议就是openwire 二、Transmission Control Protocol(TCP) 1、这是默认的broker配置,TCP的Client监听的端口为61616 2、在网络传输协议之前,必须要序列化数据,消息是通过一个叫wire protocol的来序列化成字节流, 默认情况下 ActiveMQ默认把wire protocol叫做openwire,目的是促使网络上的效率和数据进行快速交互 3、TCP连接的url形式如下:“tcp://hostname:port?key=value&key

Kafka、RabbitMQ、RocketMQ等消息中间件的介绍和对比

匆匆过客 提交于 2020-02-26 07:42:56
【推荐】2020年最新Java电子书集合.pdf(吐血整理) >>> 前言 在分布式系统中,我们广泛运用消息中间件进行系统间的数据交换,便于异步解耦。现在开源的消息中间件有很多,前段时间产品 RocketMQ (MetaQ的内核) 也顺利开源,得到大家的关注。 概念 MQ简介 MQ,Message queue,消息队列,就是指保存消息的一个容器。具体的定义这里就不类似于数据库、缓存等,用来保存数据的。当然,与数据库、缓存等产品比较,也有自己一些特点,具体的特点后文会做详细的介绍。 现在常用的MQ组件有ActiveMQ、RabbitMQ、RocketMQ、ZeroMQ、MetaMQ,当然近年来火热的kafka,从某些场景来说,也是MQ,当然kafka的功能更加强大,虽然不同的MQ都有自己的特点和优势,但是,不管是哪种MQ,都有MQ本身自带的一些特点,下面,介绍MQ的特点。 MQ特点 1、先进先出 不能先进先出,都不能说是队列了。消息队列的顺序在入队的时候就基本已经确定了,一般是不需人工干预的。而且,最重要的是,数据是只有一条数据在使用中。 这也是MQ在诸多场景被使用的原因。 2、发布订阅 发布订阅是一种很高效的处理方式,如果不发生阻塞,基本可以当做是同步操作。这种处理方式能非常有效的提升服务器利用率,这样的应用场景非常广泛。 3、持久化

理解RabbitMQ中的AMQP-0-9-1模型

时光怂恿深爱的人放手 提交于 2020-02-26 01:55:23
前提 之前有个打算在学习RabbitMQ之前,把AMQP详细阅读一次,挑出里面的重点内容。后来找了下RabbitMQ的官方文档,发现了有一篇文档专门介绍了RabbitMQ中实现的AMQP模型部分,于是直接基于此文档和个人理解写下这篇文章。 AMQP协议 AMQP 全称是Advanced Message Queuing Protocol,它是一个(分布式)消息传递协议,使用和符合此协议的客户端能够基于使用和符合此协议的消息传递中间件代理(Broker,也就是经纪人,个人感觉叫代理合口一些)进行通信。AMQP目前已经推出协议1.0,实现此协议的比较知名的产品有StormMQ、RabbitMQ、Apache Qpid等。RabbitMQ实现的AMQP版本是0.9.1,官方文档中也提供了该协议pdf文本下载,有兴趣可以翻阅一下。 消息中间件代理的职责 Messaging Broker,这里称为消息中间件代理。它的职责是从发布者(Publisher,或者有些时候称为Producer,生产者)接收消息,然后把消息路由到消费者(Consumer,或者有些时候称为Listener,监听者)。 因为消息中间件代理、发布者客户端和消费者客户端都是基于AMQP这一网络消息协议,所以消息中间件代理、发布者客户端和消费者客户端可以在不同的机器上,从而实现分布式通讯和服务解耦。