amqp

springboot 集成RabbitMQ

时光毁灭记忆、已成空白 提交于 2020-08-05 08:25:24
RabbitMQ 即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分发的作用。 消息中间件在互联网公司的使用中越来越多,刚才还看到新闻阿里将RocketMQ捐献给了apache,当然了今天的主角还是讲RabbitMQ。 消息中间件最主要的作用是解耦,中间件最标准的用法是生产者生产消息传送到队列,消费者从队列中拿取消息并处理,生产者不用关心是谁来消费,消费者不用关 心谁在生产消息,从而达到解耦的目的。在分布式的系统中,消息队列也会被用在很多其它的方面,比如:分布式事务的支持,RPC的调用等等。 以前一直使用的是ActiveMQ,在实际的生产使用中也出现了一些小问题,在网络查阅了很多的资料后,决定尝试使用RabbitMQ来替换ActiveMQ,RabbitMQ的高可用性、高性能、灵活性等一些特点吸引了我们,查阅了一些资料整理出此文。 RabbitMQ介绍 RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展 性、高可用性等方面表现不俗。RabbitMQ主要是为了实现系统之间的双向解耦而实现的。当生产者大量产生数据时,消费者无法快速消费,那么需要一个中 间层。保存这个数据。 AMQP,即Advanced Message Queuing Protocol,高级消息队列协议

工作感受月记202008月

时间秒杀一切 提交于 2020-08-05 07:52:59
2020年08月03号 八月首日工作为hackathon,casebot代码多,无穷思量思想融其中。 case不是重点,重点是写代码,好客户虽然好,但是成长就是在不好客户的追打下成长的。 今日听经(宠辱若惊,大患若身),不好的客户才是你学习的巨大动力。 运动中体悟身体,听道德经,结合自我人生,完成精进脱变。 计划做的事,需要慢慢的做,计划不做的事,就不做,让心不要纠结。 今日研几: 在上午与lina的对话中要多承担验证责任。不可以回答模棱两可的话语。用客户思维来面对自己如果这样说,你会如何感受。 今日关键字: 忆,看见文字忆去年上海行。 回忆hongmei,和yannan。 以图为证,看文字,思量人。 2020年08月04号 此刻,困字开头。 墨墨单词25,看着看着欲睡觉。 查看amqp协议和request请求。 记录日杂写状态。 远程视频吃面包,消灭水果是两梨。 打球出汗情绪高,全程流汗身心畅。 全天在a到下午,无法吃饭转交中。 下午查看github分析日志并查询基本原因. 多次提及降低案例等级不成功,随时担心下次问题在发生。 欲要确定案例发生时情况,需要官方解释并确保,我们为难在此点。 上午欲把hackathon项目进行下去,准备Linux app service的readiness,但是上午一a,a到底。 在上吃东西,测体重,感叹体重依旧82,何时才能满足目标75。 ok

RabbitMQ的应用场景以及基本原理介绍

≯℡__Kan透↙ 提交于 2020-08-05 04:39:44
RabbitMQ 是一个由 erlang 开发的 AMQP(Advanced Message Queuing Protocol)的开源实现。 AMQP:高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。 AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。 RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。 一、应用场景 异步处理 应用解耦 流量削峰 二、RabbitMQ 特性 RabbitMQ 最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。具体特点包括: # 可靠性(Reliability) RabbitMQ 使用一些机制来保证可靠性,如持久化、传输确认、发布确认。 # 灵活的路由(Flexible Routing) 在消息进入队列之前,通过 Exchange 来路由消息的。对于典型的路由功能,RabbitMQ 已经提供了一些内置的 Exchange 来实现

非常强悍的 RabbitMQ 总结,细节写得真好

痴心易碎 提交于 2020-07-29 10:53:42
rabbitMQ是基于AMQP协议的,通过使用通用协议就可以做到在不同语言之间传递。 AMQP协议 核心概念 server:又称broker,接受客户端连接,实现AMQP实体服务。 connection:连接和具体broker网络连接。 channel:网络信道,几乎所有操作都在channel中进行,channel是消息读写的通道。客户端可以建立多个channel,每个channel表示一个会话任务。 message:消息,服务器和应用程序之间传递的数据,由properties和body组成。properties可以对消息进行修饰,比如消息的优先级,延迟等高级特性;body是消息实体内容。 Virtual host:虚拟主机,用于逻辑隔离,最上层消息的路由。一个Virtual host可以若干个Exchange和Queue,同一个Virtual host不能有同名的Exchange或Queue。 Exchange:交换机,接受消息,根据路由键转发消息到绑定的队列上。 banding:Exchange和Queue之间的虚拟连接,binding中可以包括routing key routing key: 一个路由规则,虚拟机根据他来确定如何路由 一条消息。 Queue:消息队列,用来存放消息的队列。 Exchange 交换机的类型,direct、topic、fanout、headers

深入浅出 RabbitMQ

孤者浪人 提交于 2020-07-28 17:20:06
什么是 RabbitMQ 简介(优点) 基于 ErLang 语言开发有高可用高并发的优点,适合集群。 开源、稳定、易用、跨平台、支持多种语言、文档齐全。 有消息确认机制和持久化机制,可靠性高。 概念 生产者和消费者 Producer :消息的生产者 Consumer :消息的消费者 Queue 消息队列提供了 FIFO 的处理机制,具有缓存消息的能力。在 RabbitMQ 中,队列消息可以设置为持久化,临时或者自动删除。 如果是持久化的队列, Queue 中的消息会在 Server 本地硬盘存储一份,防止系统 Crash 数据丢失。 如果是临时的队列, Queue 中的数据在系统重启之后就会丢失。 如实是自动删除的队列,当不存在用户连接到 Server ,队列中的数据会被自动删除。 ExChange ExChange 类似于数据通信网络中的交换机,提供消息路由策略。 在 RabbitMQ 中,生产者不是将消息直接发送给 Queue ,而是先发送给 ExChange , ExChange 根据生产者传递的 key 按照特定的路由算法将消息给指定的 Queue 。一个 ExChange 可以绑定多个 Queue 。和 Queue 一样, ExChange 也可以设置为持久化、临时或者自动删除。 Binding 所谓绑定就是将一个特定的 ExChange 和一个特定的 Queue

微服务设计 10 大反模式和陷阱!

故事扮演 提交于 2020-07-28 17:11:50
作者:飒然Hang rowkey.me/blog/2018/06/02/microservice-pitfall/ O’Reilly的电子书《Microservices AntiPatterns and Pitfalls》讲述了在微服务设计实现时十种最常见的反模式和陷阱。本文基于此书,将这十个点列出。 数据驱动迁移反模式(Data-Driven Migration) 如上图所示,此种反模式的问题在于微服务的粒度没有最终确定之前就做了数据迁移,如此当不断的调整服务粒度时,那么数据库就免不了频繁迁移,带来极大的成本。更好的方式如下图所示: 即先分离功能,数据库先保持之前的单体,等到服务粒度最终确定之后,再分离数据库。 前后端分离与不分离的本质区别 ,推荐看下。 超时反模式(The Timeout) 微服务架构是由一系列分离的服务组成的,这些服务之间通过一些远程协议进行互相之间的通信。其中牵扯到了服务的可用性和响应性问题。如下图所示: 可用性:服务消费方能够连接服务方,并可以向其发送请求。 响应性:服务方能够在消费方期望时间内给予请求响应。 为了防止服务的不可用和无法响应,通常的做法就是设置一个调用超时。此种做法表面上看是没问题的,但是试想一下如下情景:发起一个购买100个商品的请求,请求成功返回一个确认号。如果当请求超时但是请求在服务端已经成功执行了,此时这个交易实际是完成的

消息中间件之:Kafka、ActiveMQ、RabbitMQ、RocketMQ

不打扰是莪最后的温柔 提交于 2020-07-28 07:16:28
《一》kafka的工作原理介绍 《二》zk搭载kafka分布式消息队列浅析 一、简介 消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能,成为异步RPC的主要手段之一。 二、消息中间件的组成 2.1 Broker 消息服务器,作为server提供消息核心服务 2.2 Producer 消息生产者,业务的发起方,负责生产消息传输给broker, 2.3 Consumer 消息消费者,业务的处理方,负责从broker获取消息并进行业务逻辑处理 2.4 Topic 主题,发布订阅模式下的消息统一汇集地,不同生产者向topic发送消息,由MQ服务器分发到不同的订阅者,实现消息的 广播 2.5 Queue 队列,PTP模式下,特定生产者向特定queue发送消息,消费者订阅特定的queue完成指定消息的接收 2.6 Message 消息体,根据不同通信协议定义的固定格式进行编码的数据包,来封装业务数据,实现消息的传输。 三、主流消息中间节分类 kafka 1、不完全符合jms规范,注重吞吐量,类似udp 和 tcp 2、一般做大数据吞吐的管道 我们现在的用途就是负责在各个idc之间通信 3、量大对数据不是百分之百保证的,会有数据丢失,不是百分百送达(amq和rmq等有重发机制,而kafka没有);在吞吐量有提升

消息队列-一篇读懂rabbitmq(生命周期,confirm模式,延迟队列,集群)

浪子不回头ぞ 提交于 2020-07-27 00:52:37
什么是消息队列? 就是生产者生产一条消息,发送到这个rabbitmq,消费者连接rabbitmq并且进行消费,生产者和消费者并需要知道对方是如何工作的,从而实现程序之间的解耦,异步和削峰,这也就是消息队列的作用。 使用的场景也有很多,比如用户支付购买之后的发送短信,增加用户积分等等,只要能将业务逻辑抽象出来,就能很好得使用它。 下面进入正题: 先来介绍一下基本概念和参与生命周期的各个成员。 publisher:消息生产者,负责创建消息,并发送到代理服务器(rabbitmq) message:发送的消息,由 有效负载(payload) 和 标签 (label) 组成 exchange:交换器,负责接收消息并路由给服务器的队列 queue:消息队列,就是消息最后要去的地方。然后等待消费者取走并消费 consumer:消息消费者,与生产者对应,程序的另外一方,负责消费信息,并完成相应的业务逻辑 channel:信道,在tcp之上建立的通道,负责传送消息。队列的传输都是基于信道来完成的。 broker:消息队列服务器实体 下面来解析一下这张图,这张图是网上找的,虽然不够详细,但是勉强能用。 准备前提,开启rabbitmq服务,生命队列和交换器,并将两者进行绑定。 生产逻辑: publisher 通过 broker服务器ip 和 端口 尝试建立与 broker 的 tcp 连接,连接成功之后

阿里云发布新一代容器、Serverless等云原生产品,加速企业向现代IT架构演进

偶尔善良 提交于 2020-07-24 21:46:01
在6月9日2020阿里云线上峰会上,云原生应用平台产品总监赵林(丹臣)发表了《云原生2020新产品发布 传统应用架构往现代应用架构快速演进的基础设施》的主题演讲,详细介绍了阿里云全新发布的容器、中间件、Serverless等产品。随着数字经济的快速发展和扩张,越来越多的企业开始采用云原生计算的思想和技术,以主导企业的数字化转型架构。 新产品发布和解决方案升级,助力企业从传统IT架构向现代应用架构演进 云原生的技术和产品,可以帮助用户轻松地从原有的 IT 架构向现代应用架构演进。从底层应用托管平台来看,阿里云提供了容器服务ACK/ASK。在应用PaaS层,阿里云提供了SAE、EDAS、Web+三款产品。在上层,阿里云提供了函数FaaS服务,可以满足不同的业务需求。不仅如此,阿里云还提供了各种各样的中间件服务,包括业界最为完整丰富的消息队列服务,覆盖了所有常见的消息协议,如国内著名的开源消息中间件产品RocketMQ、业界流行的Kafka,AMQP/MQTT 消息队列都可以在阿里云上找到对应的商业化服务。在其它中间件领域,如微服务引擎MSE、应用配置管理ACM、云服务总线CSB,以及针对事务服务的GTS等,都可以帮助企业用户快速构建现代化的应用架构。 阿里云之所以提供如此丰富全面的云原生技术和产品,核心还是要满足客户多样化的需求。 除了应用托管平台以及常见的中间件之外

RabbitMQ broken pipe error or lost messages

末鹿安然 提交于 2020-06-27 08:03:38
问题 Using the pika library's BlockingConnection to connect to RabbitMQ, I occasionally get an error when publishing messages: Fatal Socket Error: error(32, 'Broken pipe') This is from a very simple sub-process that takes some information out of an in-memory queue and sends a small JSON message into AMQP. The error only seems to come up when the system hasn't sent any messages for a few minutes. Setup: connection = pika.BlockingConnection(parameters) channel = self.connection.channel() channel