erlang

.NET Core微服务之基于EasyNetQ使用RabbitMQ消息队列

痴心易碎 提交于 2020-04-24 16:23:57
Tip: 此篇已加入 .NET Core微服务基础系列文章索引 一、消息队列与RabbitMQ 1.1 消息队列   “ 消息 ”是在两台计算机间传送的数据单位。消息可以非常简单,例如只包含文本字符串;也可以更复杂,可能包含嵌入对象。消息被发送到队列中,“ 消息队列 ”是在消息的传输过程中保存消息的 容器 。   消息队列(Message Queue),是分布式系统中重要的组件,其通用的使用场景可以简单地描述为: 当不需要立即获得结果,但是并发量又需要进行控制的时候,差不多就是需要使用消息队列的时候。     消息队列主要解决了应用耦合、异步处理、流量削锋等问题。当前使用较多的消息队列有RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMq等,而部分数据库如Redis、Mysql以及phxsql也可实现消息队列的功能。更多详细内容请参考:《 消息队列及其应用场景介绍 》   我也在前几年写过一篇 基于Redis做消息队列 的文章,对消息队列的一个应用场景做了介绍,没有了解过的童鞋可以看看。 1.2 RabbitMQ      RabbitMQ是一款基于AMQP(高级消息队列协议),由Erlang开发的开源消息队列组件。是一款优秀的消息队列组件,他由两部分组成:服务端和客户端,客户端支持多种语言的驱动,如:.Net、JAVA、Erlang等。  

RabbitMQ系列(二)--基础组件

此生再无相见时 提交于 2020-04-24 15:50:36
声明:对于RabbitMQ的学习基于某课网相关视频和《RabbitMQ实战指南》一书,后续关于RabbitMQ的博客都是基于二者 一、什么是RabbitMQ   RabbitMQ是开源代理和队列服务器,通过普通协议在不同的应用之间共享数据,使用Erlang编写(Erlang进行数据交换的性能很好, 和原生socket 一样好的延迟响应效果),基于AMQP协议 二、AMQP AMQP高级消息队列协议:具有现代特征的二进制协议,和JMS有点像,模型如下: AMQP核心概念   1、Server:Broker,接受client连接,实现AMQP实体服务   2、Connection:应用程序和Broker的网络连接   3、Channel:网络信道,读写都是在Channel中进行(NIO的概念),包括对MQ进行的一些操作(例如clear queue等)都是在Channel中进行, 客户端可建立多个Channel,每个Channel代表一个会话任务   4、Message:由properties(有消息优先级、延迟等特性)和Body(消息内容)组成   5、Virtual host:用于消息隔离(类似Redis 16个db这种概念),最上层的消息路由,一个包含若干Exchange和Queue,同一个里面Exchange 和Queue的名称不能存在相同的。   6、Exchange

RabbitMQ TroubleShooting

◇◆丶佛笑我妖孽 提交于 2020-04-22 04:25:04
RabbitMQ是一款优秀的消息队列中间件,提供了稳定、监控完善的产品,但是软件就会有bug。为了前进路径可以畅通,我们必须了解出现的一些故障的快速处理方式,毕竟在生产环境,时间就是生命,尽快的处理是避免产生事故的最有效方式。 了解常见的一些故障,我们可以有针对的处理预案,快速、高效的处理故障,更好的运维是我们一直的追求。 查看故障信息,RabbitMQ出现故障,要通过一些有效途径快速的获取故障原因,而不能是每次都通过重启RabbitMQ服务的方式来解决。 如何查看故障信息,从几个方面 通过rabbitmqctl status ,在出现故障 服务器,查看当前MQ运行状态,该命令可以看到一些非常有用的信息 通过rabbitmqctl cluster_status ,查看集群状态是否正常。在RabbitMQ集群由于网络原因而可能出现网络割裂的情况下,可以通过该命令查看集群运行状态 查看rabbitmq 运行日志文件。可能有的小伙伴不知道该文件在哪里,在RABBITMQ_LOG_BASE定义的位置,还有小伙伴可能又要问RABBITMQ_LOG_BASE是什么,我只能说这个是rabbitmq的环境变量值,在rabbitMQ安装路径/sbin 目录下,注意看有一个rabbitmq-env.bat 文件。请通过记事本打开该文件,然后搜索RABBITMQ_LOG_BASE,可以看到具体路径

RabbitMQ精讲9:镜像模式集群搭建,整合KeepAlived+HaProxy组件

爱⌒轻易说出口 提交于 2020-04-21 04:16:48
目录 1. 镜像模式集群搭建 1.1 集群节点安装 1、安装依赖包 2、下载安装包 3、安装服务命令 4、修改集群用户与连接心跳检测 5、安装管理插件 6、服务指令 1.2 文件同步步骤 1.3 组成集群步骤 1、停止MQ服务 2、组成集群操作 3、slave加入集群操作(重新加入集群也是如此,以最开始的主节点为加入节点) 4、修改集群名称 5、查看集群状态 6、管控台界面 1.4 配置镜像队列 1.5 安装Ha-Proxy 1、Haproxy简介 HAProxy如何实现性能最大化 2、Haproxy安装 3、Haproxy配置 4、启动haproxy 5、访问haproxy 6、关闭haproxy 1.6 安装KeepAlived 1、Keepalived简介 Keepalived特性 Keepalived高可用原理 2、Keepalived安装 3、Keepalived配置 79节点(Master)配置如下 80节点(backup)配置如下 4、执行脚本编写 5、执行脚本赋权 6、启动keepalived 7、高可用测试 1.7 集群配置文件 环境变量配置文件:rabbitmq-env.conf 配置信息配置文件:rabbitmq.config 2. RabbitMQ集群恢复与故障转移 场景一:A先停, B后停 场景二:A, B同时停机 场景三:A先停, B后停, 且A无法恢复

RabbitMQ和Kafka到底怎么选?

情到浓时终转凉″ 提交于 2020-04-18 11:34:55
前言 开源社区有好多优秀的队列中间件,比如RabbitMQ和Kafka,每个队列都貌似有其特性,在进行工程选择时,往往眼花缭乱,不知所措。对于RabbitMQ和Kafka,到底应该选哪个? RabbitMQ架构 RabbitMQ是一个分布式系统,这里面有几个抽象概念。 broker:每个节点运行的服务程序,功能为维护该节点的队列的增删以及转发队列操作请求。 master queue:每个队列都分为一个主队列和若干个镜像队列。 mirror queue:镜像队列,作为master queue的备份。在master queue所在节点挂掉之后,系统把mirror queue提升为master queue,负责处理客户端队列操作请求。注意,mirror queue只做镜像,设计目的不是为了承担客户端读写压力。 如上图所示,集群中有两个节点,每个节点上有一个broker,每个broker负责本机上队列的维护,并且borker之间可以互相通信。集群中有两个队列A和B,每个队列都分为master queue和mirror queue(备份)。那么队列上的生产消费怎么实现的呢? 队列消费 如上图有两个consumer消费队列A,这两个consumer连在了集群的不同机器上。RabbitMQ集群中的任何一个节点都拥有集群上所有队列的元信息,所以连接到集群中的任何一个节点都可以

RabbitMQ和Kafka到底怎么选?

孤人 提交于 2020-04-18 11:34:37
前言 开源社区有好多优秀的队列中间件,比如RabbitMQ和Kafka,每个队列都貌似有其特性,在进行工程选择时,往往眼花缭乱,不知所措。对于RabbitMQ和Kafka,到底应该选哪个? RabbitMQ架构 RabbitMQ是一个分布式系统,这里面有几个抽象概念。 broker:每个节点运行的服务程序,功能为维护该节点的队列的增删以及转发队列操作请求。 master queue:每个队列都分为一个主队列和若干个镜像队列。 mirror queue:镜像队列,作为master queue的备份。在master queue所在节点挂掉之后,系统把mirror queue提升为master queue,负责处理客户端队列操作请求。注意,mirror queue只做镜像,设计目的不是为了承担客户端读写压力。 如上图所示,集群中有两个节点,每个节点上有一个broker,每个broker负责本机上队列的维护,并且borker之间可以互相通信。集群中有两个队列A和B,每个队列都分为master queue和mirror queue(备份)。那么队列上的生产消费怎么实现的呢? 队列消费 如上图有两个consumer消费队列A,这两个consumer连在了集群的不同机器上。RabbitMQ集群中的任何一个节点都拥有集群上所有队列的元信息,所以连接到集群中的任何一个节点都可以

RabbitMQ使用教程(一)RabbitMQ环境安装配置及Hello World示例

巧了我就是萌 提交于 2020-04-18 07:34:48
你是否听说过或者使用过 队列 ? 你是否听说过或者使用过 消息队列 ? 你是否听说过或者使用过 RabbitMQ ? 提到这几个词,用过的人,也许觉得很简单,没用过的人,也许觉得很复杂,至少在我没使用消息队列之前,听别人提到消息队列,都感觉很复杂,很高深。 好了,言归正传,本篇博客我们就讲解下什么是消息队列,RabbitMQ环境的安装配置,最后通过一个Hello World示例了解下RabbitMQ的使用方法。 1. 基本概念讲解 1.1 队列(Queue) 队列是常用的数据结构之一,是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。 进行插入操作的端称为队尾,进行删除操作的端称为对头。 在Java中,java.util包下已经有队列的相关实现,我们可以直接使用。 1.2 消息队列(Message Queue) 消息 是计算机/应用间传送的数据单位,可以非常简单,例如只包含文本字符串,也可以很复杂,可能包含嵌入对象。 消息队列 是在消息的传输过程中保存消息的容器。 消息传输时,先发送到队列,队列的主要目的是提供路由并保证消息的传递,如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功的传递它。 可以把消息队列理解成快递公司,你需要寄一个物件(消息)给你的朋友,快递公司收到物件会保证物件送到你的朋友手中

RabbitMQ erlang "hello world"

生来就可爱ヽ(ⅴ<●) 提交于 2020-04-18 06:43:30
官方文档: http://www.rabbitmq.com/tutorials/tutorial-one-python.html 下文为翻译和erlang客户端的例子 RabbitMQ是一个消息中间件,它主要的思想非常简单:接收和发送消息。你可以把RabbitMQ想象成一个邮局:当你把信件放入邮筒的时候你非常确定邮递员会把你的信件投递给信件的接收者。在这个比喻里面,RabbitMQ是一个邮筒,邮局以及邮递员。 RabbitMQ与邮局的主要区别在于,RabbitMQ不处理信件,取而代之的是它接收,存储并且发送二进制数据,也就是所谓的消息。 RabbitMQ 与 messaging 通常情况下,使用一些术语。 生产也就是发送的意思,发送消息的程序叫做生产者,我们把它画成这样,使用"p"; 队列是邮箱的名字,它存在于RabbitMQ的内部,虽然消息在RabbitMQ和你的应用程序之间流转,但是消息只能被存储在一个队列里面。队列没有任何限制,只要你愿意,它可以存储任意多个消息,本质上,队列是一个没有限制的buffer。一个队列可以接收多个生产者的消息,多个消费者也可以从一个队列里面接收消息。队列一般用下图表示,上面是队列的名字: 消费其实就是接收的意思。一个消费者就是一个等待接收消息的应用程序。消费者一般用下图表示: 值得注意的是,生产者,消费者和RabbitMQ不需要部署在同一台物理机上

消息中间件——RabbitMQ(三)理解RabbitMQ核心概念和AMQP协议!

柔情痞子 提交于 2020-04-18 06:43:04
前言 本章学习,我们可以了解到以下知识点: 互联网大厂为什么选择RabbitMQ? RabbiMQ的高性能之道是如何做到的? 什么是AMQP高级协议? AMQP核心概念是什么? RabbitMQ整体架构模型是什么样子的? RabbitMQ消息是如何流转的? 1. 初识RabbitMQ RabbitMQ 是一个开源的消息代理和队列服务器,用来通过普通协议在完全不同的应用之间 共享数据 (RabbitMQ能够实现跨语言跨平台的机制,),RabbitMQ是使用 Erlang 语言来编写的,并且RabbitMQ是基于 AMQP 协议的。 仅仅通过上面一句话,相信大家一定有很多疑惑和问题。 RabbitM成熟度到底怎么样? 业界使用度怎么样?哪些大厂在使用?为什么? 包括RabbitMQ到底都有哪些特点? RabbitMQ为什么要用Erlang语言去编写? 什么是AMQP协议?AMQP协议里面的具体的规范又是什么? 我相信大家跟我一样都会有这样的疑惑。那么我们一起来学习一RabbitMQ吧。 我们来了解第一个问题。 2. 互联网大厂为什么选择RabbitMQ? 业界使用度怎么样?哪些大厂在使用?为什么?都有哪些优点? 据我了解:滴滴、美团、去哪儿、头条... 这些互联网大厂都会采用RabbitMQ作为它底层的消息通信的一个基础组件。根本原因: 开源、性能优秀、稳定性保障

Kafka,RocketMQ,RabbitMQ部署与使用体验

喜欢而已 提交于 2020-04-15 13:20:01
【推荐阅读】微服务还能火多久?>>> 前言 近期在研究各种消息队列方案,为了有一个直观的使用体验,我把Kafka,RocketMQ,RabbitMQ各自部署了一遍,并使用了最基本的生产与消费消息功能。在部署过程中也遇到一些问题,特此记录。本文只适用于没有使用过消息队列,还停留在安装部署阶段的新手用户,要了解一个软件,最好的开始方法是开始使用他,这样才会有一个直观的印象。本篇文章的作用也在于此,至于需要了解更深入的架构与细节,则需要查询其他的文档资料,这也不是本文的目的。我这里使用的操作系统是Centos 6.x,硬件配置一般即可。 Kafka的部署与使用 Kafka的部署我是参考官网的步骤开始的,请直接参考其Quickstart章节。 Step1:下载安装包并解压 # wget https://mirror.bit.edu.cn/apache/kafka/2.4.1/kafka_2.12-2.4.1.tgz # tar -xzf kafka_2.12-2.4.1.tgz # cd kafka_2.12-2.4.1 问题:下载有可能报下面的错误(没有报错则忽略): To connect to mirrors.tuna.tsinghua.edu.cn insecurely, use ‘--no-check-certificate’. 只需要添加报错提示的参数即可: wget --no