消息队列

RabbitMQ学习(2)(工作队列)

五迷三道 提交于 2020-03-07 06:09:48
工作队列 在第 一个教程中, 我们编写了用于从命名队列发送和接收消息的程序。 在这一个中,我们将创建一个 工作队列 ,用于在多个工作人员之间分配耗时的任务。 工作队列(又名: 任务队列 ) 背后的主要思想 是避免立即执行资源密集型任务,必须等待完成。 相反,我们安排稍后完成任务。 我们把一个 任务 封装 成一个消息并发送给一个队列。 在后台运行的工作进程将弹出任务并最终执行作业。 当你运行许多工人时,任务将在他们之间共享。 这个概念在Web应用程序中特别有用,在短的HTTP请求窗口中不可能处理复杂的任务。 默认情况下,RabbitMQ将按顺序将每条消息发送给下一个使用者。 平均而言,每个消费者将获得相同数量的消息。 这种分发消息的方式称为循环法(round-robin)。 试试三个或更多的工人。 消息确认 做任务可能需要几秒钟的时间。 你可能会想知道如果其中一个消费者开始一个长期的任务,并且只是部分完成而死亡会发生什么。 使用我们当前的代码,一旦RabbitMQ向客户发送消息,立即将其标记为删除。 在这种情况下,如果你杀了一个工人,我们将失去刚刚处理的信息。 我们也将失去所有派发给这个特定工作人员但尚未处理的消息。 但我们不想失去任何任务。 如果一名工人死亡,我们希望将任务交付给另一名工人。 为了确保消息永不丢失,RabbitMQ支持 消息 确认 。 消费者发回确认(告知

kafka 消费重试 实现

有些话、适合烂在心里 提交于 2020-03-06 20:49:29
第一个文章 https://www.jdon.com/49366 在分布式系统中,重试是不可避免的,我们经常使用后台跑定时进行数据同步,同步不成功就实现重试,重试次数多少取决于你追求一致性还是可用性,如果希望两个系统之前无论如何都必须一致,那么你设置重试次数为无限,当然这是理想情况,实际情况是有重试次数限制和重试时间限制,如果超过不成功怎么办?丢弃会造成数据丢失进而永久不一致,人工介入又非常复杂,通过引入死信队列可以优雅处理这种问题。本文是优步Uber工程师夏宁(Ning Xia)发布的一篇如何使用Kafka的死信队列实现重试处理的。 从网络错误到复制问题甚至下游依赖关系等场景中随时可能发生的中断,大规模运行的服务必须尽可能地优雅发现、识别并处理故障。 考虑到优步Uber的运维范围和效率,我们的系统发生故障时必须智能化地具有容错性和不妥协性。为了实现这一目标,我们决定使用开源分布式消息传递平台Apache Kafka,该平台已经过业界测试,并能提供大规模的高性能。 利用这些属性,优步行车保险工程团队通过扩展卡夫卡,在我们现有的事件驱动架构中使用无阻塞请求重新处理和死信队列(DLQ),实现错误处理的解耦,在不中断实时流量情况下实现可观察的错误处理。这一策略有助于我们遍布200多个城市的驾驶员能够可靠地实现每次行程的保费扣除。 在本文中

.NET Core使用RabbitMQ

为君一笑 提交于 2020-03-06 16:02:13
原文转自: https://www.cnblogs.com/linhuiy/p/12017453.html 最近项目组兄弟在使用Rabbit MQ,但是在使用过程中发现消息队列里面的数据偶尔会产生串联,根据经验判定应该是消息队列使用模式有问题,于是就找到此篇文章。 RabbitMQ简介  RabbitMQ是一个开源的,基于AMQP(Advanced Message Queuing Protocol)协议的完整的可复用的企业级消息队,RabbitMQ可以实现点对点,发布订阅等消息处理模式。 RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持Linux,windows,macOS,FreeBSD等操作系统,同时也支持很多语言,如:Python,Java,Ruby,PHP,C#,JavaScript,Go,Elixir,Objective-C,Swift等。 RabbitMQ安装 我使用的环境是ubuntu18.04, RabbitMq需要Erlang语言的支持,在安装RabbitMq之前需要安装Erlang sudo apt-get install erlang-nox 更新源 sudo apt-get update 安装RabbitMq sudo apt-get install rabbitmq-server 添加users用户,密码设置为admin

RabbitMQ 资源整理

戏子无情 提交于 2020-03-06 11:09:30
参考 Windows下RabbitMQ安装及配置 消息中间件的使用场景 RabbitMQ教程 记录 消息的确认模式 消费者从队列中获取消息,服务端如何知道消息已经被消费呢? 模式1:自动确认 只要消息从队列中获取,无论消费者获取到消息后是否成功消息,都认为是消息已经成功消费。 模式2:手动确认 消费者从队列中获取消息后,服务器会将该消息标记为不可用状态,等待消费者的反馈,如果消费者一直没有反馈,那么该消息将一直处于不可用状态。 手动模式: 自动模式: 来源: CSDN 作者: chrislin9 链接: https://blog.csdn.net/qq_31964019/article/details/104689760

详解RabbitMQ安装过程

不羁的心 提交于 2020-03-06 11:01:31
场景 消息队列已成为分布式系统必要组件,在很多场景下均有广泛应用,通过消息队列可将微服务解耦,拓展了架构思路和可行方案。 常用的消息队列很多,SpringCloud默认支持的有RabbitMQ及Kafka,今天介绍下RabbitMQ的安装过程。 安装Erlang RabbitMQ是使用Erlang开发的,所以需要先安装Erlang,打开网页: https://www.erlang.org/downloads ,选择windows版本下载即可。 安装过程乏善可陈,一直下一步就可以了,此处不再截图。当然兄弟你要想改下安装位置还是可以的哈哈。 安装完毕后配置下环境变量 ERLANG_HOME配置为安装目录:`D:\develop\erl10.6 PATH追加 ;%ERLANG_HOME%\bin 最后,命令行输入erl验证是否安装成功,如下图表示成功: 安装RabbitMQ 打开网页 http://www.rabbitmq.com/download.html ,选择windows版本下载 下载后直接下一步下一步安装即可。 启动 从命令行选择 RabbitMQ Command Promt ,启动命令行管理工具。 输入命令 rabbitmq-plugins enable rabbitmq_management 即可启动RabbitMQ如下图: 使用 在浏览器地址栏输入 http://127

Spring Boot的消息之旅(一)

∥☆過路亽.° 提交于 2020-03-06 02:00:03
1.什么是消息队列? 消息队列,英文名message queue,简称MQ。MQ是一种应用程序对应用程序的通讯方法。消息队列是分布式应用中不可或缺的组件,主要解决应用解耦、异步消息、流量削峰等问题,实现高性能、高可用、可伸缩和最终一致性的架构。常用的有RabbitMQ、Kafka、ActiveMQ、RocketMQ等。 2.RabbitMQ 2.1 RabbitMQ的几种角色 RabbitMQ是一个消息代理,它的工作是接收、存储和发送消息(Message)这种二进制数据。 下面是RabbitMQ和消息所涉及的一些术语: ·生产(Producing):意思就是发送。发送消息的程序就是生产者(Producer),用P表示。 ·队列(Queue):消息虽然经过了RabbitMQ和应用程序,但它只能存储在队列中。实质上,队列就是一个巨大的消息缓冲区,大小只受主机内存和硬盘限制。 ·消费(Consuming):消费和接收(receiving)是一个意思,就是等待获取消息的程序。用C表示。 2.2 RabbitMQ的几种模式 2.2.1 简单模式 点对点消息发送,这种模式多用于聊天场景。如图: 2.2.2 工作队列模式 一个消息发送给多个消费者,多用于资源调度和抢红包等场景。如图: 2.2.3 订阅模式 生产者( Producer)只需要把消息发送给一个交换机( Exchange)

kafka概念扫盲

左心房为你撑大大i 提交于 2020-03-05 23:42:47
一、kafka概述 1.1、定义 Kakfa是一个分布式的基于发布/订阅模式的消息队列(message queue),主要应用于大数据的实时处理领域 1.2、消息队列 1.2.1、传统的消息队列&新式的消息队列的模式 上面是传统的消息队列,比如一个用户要注册信息,当用户信息写入数据库后,后面还有一些其他流程,比如发送短信,则需要等这些流程处理完成后,在返回给用户 而新式的队列是,比如一个用户注册信息,数据直接丢进数据库,就直接返回给用户成功 1.2.2、使用消息队列的好处 A、 解耦 B、 可恢复性 C、 缓冲 D、 灵活性&峰值处理能力 E、 异步通信 1.2.3、消息队列的模式 A、点对点模式 消息生产者发送消息到消息队列中,然后消息消费者从队列中取出并且消费消息,消息被消费后,队列中不在存储。所以消息消费者不可能消费到已经被消费的消息;队列支持存在多个消费者,但是对于一个消息而言,只会 有一个消费者可以消费;如果想发给多个消费者,则需要多次发送该条消息 B】发布/订阅模式(一对多,消费者消费数据之后不会清除消息) 消息生产者将消息发布到topic中,同时有多个消息消费者(订阅)消费该消息,和点对点的方式不同,发布到topic的消息会被所有的订阅者消费;但是数据保留是期限的,默认是7天,因为他不是存储系统;kafka就是这种模式的;有两种方式,一种是是消费者去主动去消费(拉取

学习RabbitMQ记录!

若如初见. 提交于 2020-03-05 21:07:26
一,什么是RabbitMQ ? AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。 AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。 RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。 二 ,RabbitMQ 的推送流程 简单来说就是 消息生产者 发送消息给交换机,交换机找到和他绑定的队列 -》找到是否有消费者在监听这个队列,有就把消息发送过去。 exchanges 交换机的几种类型: 路由键介绍:队列和交换金绑定时候的一种标识。通过这个标识当我们发送信息给交换机时候带着这个路由键,系统就能够找到这个路由键下的队列。 Direct Exchage 直连型的交换机,(只发送给对应的路由键下的队列) fanoutExchage 扇形交换机 (无视路由键会发送给所有绑定在这个交换机上的队列) topic exchange

从ELK到EFK

冷暖自知 提交于 2020-03-05 12:49:02
背景 作为中国最大的在线教育站点,目前沪江日志服务的用户包含沪江网校,交易,金融,CCtalk(直播平台) 等多个部门的多个产品的日志搜索分析业务,每日产生的各类日志有好十几种,每天处理约10亿条(1TB)日志,热数据保留最近7天数据,冷数据永久保存。 为什么做日志系统 首先,什么是日志? 日志就是程序产生的,遵循一定格式(通常包含时间戳)的文本数据 通常日志由服务器生成,输出到不同的文件中,一般会有系统日志、 应用日志、安全日志。这些日志分散地存储在不同的机器上。 通常当系统发生故障时,工程师需要登录到各个服务器上,使用 grep / sed / awk 等 Linux 脚本工具去日志里查找故障原因。在没有日志系统的情况下,首先需要定位处理请求的服务器,如果这台服务器部署了多个实例,则需要去每个应用实例的日志目录下去找日志文件。每个应用实例还会设置日志滚动策略(如:每天生成一个文件),还有日志压缩归档策略等。 这样一系列流程下来,对于我们排查故障以及及时找到故障原因,造成了比较大的麻烦。因此,如果我们能把这些日志集中管理,并提供集中检索功能,不仅可以提高诊断的效率,同时对系统情况有个全面的理解,避免事后救火的被动。 我认为,日志数据在以下几方面具有非常重要的作用: 数据查找:通过检索日志信息,定位相应的 bug ,找出解决方案 服务诊断:通过对日志信息进行统计、分析

Kafka学习笔记1 Kafka简介

帅比萌擦擦* 提交于 2020-03-05 09:48:09
正文 回到顶部 一、简介 1.1 概述 Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。 主要应用场景是:日志收集系统和消息系统。 Kafka主要设计目标如下: 以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间的访问性能。 高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100K条消息的传输。 支持Kafka Server间的消息分区,及分布式消费,同时保证每个partition内的消息顺序传输。 同时支持离线数据处理和实时数据处理。 Scale out:支持在线水平扩展 1.2 消息系统介绍 一个消息系统负责将数据从一个应用传递到另外一个应用,应用只需关注于数据,无需关注数据在两个或多个应用间是如何传递的。分布式消息传递基于可靠的消息队列,在客户端应用和消息系统之间异步传递消息。有两种主要的消息传递模式: 点对点传递模式、发布-订阅模式 。大部分的消息系统选用发布-订阅模式。 Kafka就是一种发布-订阅模式 。 1.3 点对点消息传递模式 在点对点消息系统中,消息持久化到一个队列中。此时