amqp

golang rabbitmq 工具类

我与影子孤独终老i 提交于 2020-08-09 16:01:49
package mq import ( "bytes" "errors" "github.com/streadway/amqp" "strings" ) var conn *amqp.Connection var channel *amqp.Channel var exchanges string var topics string var hasMQ bool = false var mqAddr string type Reader interface { Read(msg *string) (err error) } // 初始化 参数格式:amqp://用户名:密码@地址:端口号/host func SetupRMQ(rmqAddr string) (err error) { //用于重连 mqAddr = rmqAddr if channel == nil || conn == nil { conn, err = amqp.Dial(rmqAddr) if err != nil { return err } channel, err = conn.Channel() if err != nil { return err } hasMQ = true } if conn.IsClosed() { conn, err = amqp.Dial(rmqAddr) if err !

(github源码) 如何利用.NETCore向Azure EventHubs准实时批量发送数据?

倾然丶 夕夏残阳落幕 提交于 2020-08-09 10:35:33
最近在做一个基于Azure云的物联网分析项目: .netcore采集程序向Azure事件中心(EventHubs)发送数据,通过Azure EventHubs Capture转储到Azure BlogStorage,供数据科学团队分析。 为什么使用Azure事件中心? Azure事件中心是一种Azure上完全托管的实时数据摄取服务, 每秒可流式传输来自website、app、device任何源的数百万个事件。提供的统一流式处理平台和时间保留缓冲区,将事件生成者和事件使用者分开。 事件生成者: 可使用https、AQMP协议发布事件 分区:事件中心通过 分区使用者模式 提供消息流式处理功能,提高可用性和并行化 事件接收者:所有事件中心使用者通过AMQP 1.0会话进行连接,读取数据 例如,如果事件中心具有四个分区,并且其中一个分区要在负载均衡操作中从一台服务器移动到另一台服务器,则仍可以通过其他三个分区进行发送和接收。 此外,具有更多分区可以让更多并发读取器处理数据,从而提高聚合吞吐量。 了解分布式系统中分区和排序的意义是解决方案设计的重要方面。 为了帮助说明排序与可用性之间的权衡,请参阅 CAP 定理 最直观的方式:请在portal.azure.cn门户站点---->创建事件中心命名空间---> 创建事件中心 .NetCore 准实时批量发送数据到事件中心 .NET库 (Azure

026. RabbitMQ 入门及消息分发机制

空扰寡人 提交于 2020-08-09 06:09:21
1. RabbitMQ 简介 RabbitMQ 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,支持多种客户端。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。 2. RabbitMQ 安装运行 1. 安装依赖环境 安装 通用依赖 yum install -y autoconf yum install -y ncurses-devel 安装 erlang wget https://github.com/erlang/otp/archive/OTP-22.2.tar.gz tar vxf OTP-22.2.tar.gz cd otp-OTP-22.2/ ./otp_build autoconf ./configure make make install 安装 socat sudo yum install -y socat 2. 安装 RabbitMQ 下载 wget -P /home/download https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.23/rabbitmq-server-3.7.23-1.el7.noarch.rpm 可以在 https://github.com/rabbitmq/rabbitmq-server/tags 下载历史版本。

RabbitMQ基础概念详细介绍

不羁的心 提交于 2020-08-09 00:01:53
https://www.jianshu.com/p/e55e971aebd8 本文对 rabbitmq 基础介绍,完全是为了下一篇 rabbitmq 性能测试做准备,让读者去了解我们需要测试的是什么样一个“东西”。 引言 你是否遇到过两个(多个)系统间需要通过定时任务来同步某些数据?你是否在为异构系统的不同进程间相互调用、通讯的问题而苦恼、挣扎?如果是,那么恭喜你,消息服务让你可以很轻松地解决这些问题。 消息服务擅长于解决多系统、异构系统间的数据交换(消息通知/通讯)问题,你也可以把它用于系统间服务的相互调用(RPC)。本文将要介绍的RabbitMQ就是当前最主流的消息 中间件 之一。 RabbitMQ简介 AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的 中间件 设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。 AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。 RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性

RabbitMQ学习-简单DEMO实现

回眸只為那壹抹淺笑 提交于 2020-08-08 20:54:56
介绍: RabbitMQ是一个由erlang开发的基于AMQP(Advanced Message Queue )协议的开源实现。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面都非常的优秀。是当前最主流的消息中间件之一。(官网: http://www.rabbitmq.com ) AMQP,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,同样,消息使用者也不用知道发送者的存在。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。   消息队列的使用过程大概如下:     (1)客户端连接到消息队列服务器,打开一个channel。     (2)客户端声明一个exchange,并设置相关属性。     (3)客户端声明一个queue,并设置相关属性。     (4)客户端使用routing key,在exchange和queue之间建立好绑定关系。   (5) 客户端投递消息到exchange。exchange接收到消息后,就根据消息的key和已经设置的binding,进行消息路由,将消息投递到一个或多个队列里。     P: 为Producer,数据的发送方。     C:为Consumer,数据的接收方。     Exchange:消息交换机

RabbitMQ 简介以及使用场景

让人想犯罪 __ 提交于 2020-08-07 13:32:01
  一. RabbitMQ 简介   MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。 排队指的是应用程序通过 队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。   RabbitMQ是使用Erlang语言开发的开源消息队列系统,基于AMQP协议来实现。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、 安全。AMQP协议更多用在企业系统内,对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次。   二. RabbitMQ 使用场景 1. 解耦(为面向服务的架构(SOA)提供基本的最终一致性实现)   场景说明:用户下单后,订单系统需要通知库存系统。传统的做法是,订单系统调用库存系统的接口。      传统模式的缺点:   假如库存系统无法访问,则订单减库存将失败,从而导致订单失败   订单系统与库存系统耦合   引入消息队列      订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功   库存系统:订阅下单的消息,采用拉/推的方式

Are topic exchanges the only exchanges that support wildcards?

谁说我不能喝 提交于 2020-08-07 05:34:44
问题 In trying to understanding the difference between direct, fanout and topic exchanges, I want to confirm that the advantage of a topic exchange is that a producer pushes to an exchange and specifies a fully specific routing key, and queues can bind to multiple routing keys via wildcards. e.g. topic pushes to... $channel->basic_publish($msg, 'logs-exchange', 'error.critical.ram') And a queue that would message the on-call team on all critical errors would bind like... $channel->queue_bind('on

golang实现rabbitmq消费者模式 断线重连机制

为君一笑 提交于 2020-08-06 23:38:30
在连接第三方组件的时候实现断线重连机制是很有必要的事情,因为你不知道在啥时候他突然就抽风挂掉了。以rabbitmq为例,在突然面对大流量写入,或者连接数被打满(比如在资讯,直播等模块使用rabbitmq(惨痛的教训))mq就挂掉了,如果你的消费者没有重连机制,你的消费者进程在mq挂掉后,也会自动挂掉。然后等运维修复了mq,但是你的消费者进程却无法再次连接消费了,这就有点恐怖了。要不就写个shell 脚本 ,每隔30S或者1分钟去检测进程活度,挂掉了就重启消费者。当然最简单的还是在消费者的代码里实现断线重连机制。代码如下 package rabbitmq import ( "encoding/json" "fmt" "github.com/streadway/amqp" "time" ) //测试用例 type Obj struct { Item1 string `json:"item1"` Item2 string `json:"item2"` Item3 string `json:"item3"` } func StartAMQPConsume() { defer func() { if err := recover(); err != nil { time.Sleep(3 * time.Second) fmt.Println("休息3秒") StartAMQPConsume()

PHP实现RabbitMQ消息队列

↘锁芯ラ 提交于 2020-08-05 18:06:11
先安装PHP对应的RabbitMQ,这里用的是 php_amqp 不同的扩展实现方式会有细微的差异. php扩展地址: http:// pecl.php.net/package/am qp 具体以官网为准 http://www. rabbitmq.com/getstarted .html 介绍 config.php 配置信息 BaseMQ.php MQ基类 ProductMQ.php 生产者类 ConsumerMQ.php 消费者类 Consumer2MQ.php 消费者2(可有多个) config.php <?php return [ //配置 'host' => [ 'host' => '127.0.0.1', 'port' => '5672', 'login' => 'guest', 'password' => 'guest', 'vhost'=>'/', ], //交换机 'exchange'=>'word', //路由 'routes' => [], ];  BaseMQ.php <?php /** * Created by PhpStorm. * User: pc * Date: 2018/12/13 * Time: 14:11 */ namespace MyObjSummary\rabbitMQ; /** Member * AMQPChannel *

云原生时代消息中间件的演进路线

痴心易碎 提交于 2020-08-05 16:11:36
引言 本文以一张云进化历史图开场,来谈谈云原生时代消息中间件的演进路线,但本文绝对不是“开局一张图,内容全靠编”。 从虚拟化技术诞生以来,IaaS/PaaS/SaaS概念陆续被提了出来,各种容器技术层出不穷。到2015年,Cloud Native概念应运而生,一时间,各种云厂商,云服务以及云应用都加上了“云原生”前缀。 我们也一直在思考,传统的消息中间件需要做些什么才能加上云原生这个修饰词,这也是本文探讨的主题:传统的消息中间件如何持续进化为云原生的消息服务。 云原生消息服务 什么是云原生 首先来谈谈什么是云原生,云原生是一个天然适用于云计算的架构理念,实践云原生技术理念的应用可以最大化享受云计算的技术红利,包括弹性伸缩、按量付费、无厂商绑定、高SLA等。 应用在实践云原生技术理念时一般会遵循四个要素: 采取DevOps领域的最佳实践来管理研发和运维流程。 通过CICD工具链做到应用的快速迭代和持续交付。 采取微服务架构。 采取容器及相关技术进行应用的托管。 消息服务作为应用的通信基础设施,是微服务架构应用的核心依赖,也是实践云原生的核心设计理念的关键技术,通过消息服务能够让用户很容易架构出分布式的、高性能的、弹性的、鲁棒的应用程序。消息服务在云原生的重要性也导致其极可能成为应用实践云原生的阻塞点,所以消息服务的云原生化是至关重要的。 什么是云原生消息服务 先说结论