Fanout

Springboot 整合RabbitMQ

 ̄綄美尐妖づ 提交于 2021-02-14 09:30:32
消息队列 何谓消息队列,我们都知道,队列 queue 我们在学习线程知识的时候碰到过,多线程 生产者消费者模型 生产者生产产品到队列当中。消费者从队列当中拿取产品进行消费。这就是一个队列,当生产者消费的速度大于消费者消费的速度,所堆积起来的东西就需要一个东西来进行缓存它,然后让消费者慢慢消费。就好比一个冰箱,一次性买的太多吃不完,那就先放到冰箱里面,慢慢吃完。 RabbitMQ 作为一款优秀的消息队列,生产者和消费者通过中间件队列进行解耦。无需关心是谁生产的,达到解耦的目的。 相关概念 我们通过这样一张图,就会有这样几个概念需要理解 生产者 消费者 RabbitMQ (包含交换机和队列) 生产者和消费者、队列我们已经举例过了。这里主要说一下交换机以及虚拟主机 交换机 从这个名称我就可以大致了解到。和网络交换机的概念差不多,网络交换机用来处理以太网数据帧(包) 达到交换转发的目的。很显然,我们这里的交换机也是这样的,用来交换消息,这里需要注意的地方就是 路由键 先来创建一个demo ,里面涉及到的内容,我会这逐一分析 Demo 练习 通过Springboot 整合RabbitMQ的方式来学习MQ 当中的一些交换机类型、以及虚拟主机、绑定等概念 <dependency> <groupId>org.springframework.boot</groupId> <artifactId

RabbitMQ系列之---初识RabbitMQ

£可爱£侵袭症+ 提交于 2021-01-26 08:05:39
为什么要使用RabbitMQ? 消息队列的作用 异步调用 系统解耦 削峰限流 消息通讯 消息队列的缺点 系统可用性降低 系统稳定性降低 分布式一致性问题(可靠消息最终一致性的分布式事务方案解决) RabbitMQ的优势 支持高并发、高吞吐、性能好 有完善的后台管理界面 它还支持集群化、高可用部署架构、消息高可靠支持 RabbitMQ的开源社区很活跃,较高频率的迭代版本,来修复发现的bug以及进行各种优化 最重要的是它是开源免费的。 RabbitMQ的缺点 它是基于erlang语言开发的,所以导致较为难以分析里面的源码,也较难进行深层次的源码定制和改造,毕竟需要较为扎实的erlang语言功底才可以。 核心概念 Server :又称Broker,接受客户端的连接,实现AMQP实体服务; Connection :连接,应用程序与Broker的网络连接; Channel :网络通道,也称信道,几乎所有的通道都在Channel中进行的,Channel是进行消息读写的通道。客户端可建立多个Channel,每个Channel代表一个会话任务;是建立在“真实的”TCP连接内的虚拟连接。AMQP命令都是通过信道发送出去的。那么我们为什么需要信道呢?为什么不直接通过TCP连接发送AMQP命令呢?因为操作系统建立和销毁TCP会话是非常昂贵的开销,而且操作系统只能建立数量不多的TCP连接

springboot集成rabbitmq测试

吃可爱长大的小学妹 提交于 2021-01-15 07:06:19
一 RabbitMQ的介绍      RabbitMQ是消息中间件的一种,消息中间件即分布式系统中完成消息的发送和接收的基础软件.这些软件有很多,包括ActiveMQ(apache公司的),RocketMQ(阿里巴巴公司的,现已经转让给apache).   消息中间件的工作过程可以用生产者消费者模型来表示.即,生产者不断的向消息队列发送信息,而消费者从消息队列中消费信息.具体过程如下:   从上图可看出,对于消息队列来说,生产者,消息队列,消费者是最重要的三个概念,生产者发消息到消息队列中去,消费者监听指定的消息队列,并且当消息队列收到消息之后,接收消息队列传来的消息,并且给予相应的处理.消息队列常用于分布式系统之间互相信息的传递.   对于RabbitMQ来说,除了这三个基本模块以外,还添加了一个模块,即交换机(Exchange).它使得生产者和消息队列之间产生了隔离,生产者将消息发送给交换机,而交换机则根据调度策略把相应的消息转发给对应的消息队列.那么RabitMQ的工作流程如下所示:   紧接着说一下交换机.交换机的主要作用是接收相应的消息并且绑定到指定的队列.交换机有四种类型,分别为Direct,topic,headers,Fanout.   Direct是RabbitMQ默认的交换机模式,也是最简单的模式.即创建消息队列的时候,指定一个BindingKey

SpringBoot整合RabbitMQ

痞子三分冷 提交于 2021-01-10 05:35:11
首先建立工程 然后 建立一个配置类,用来配置Rabbit相关,主要是交换机和队列以及绑定关系。 package com.example.demo.conf; import org.springframework.amqp.core.* ; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * @program: boot-rabbitmq * @description: * @author : 001977 * @create: 2018-07-02 17:45 */ @Configuration public class RabbitConfiguration { /** * If not conf the exchange * Channel shutdown: channel error; protocol method: #method<channel.close>(reply-code=404, reply-text=NOT_FOUND - no exchange 'hello.direct' in vhost '/', class-id=60, method-id=40) * */

RabbitMQ与SpringBoot整合

流过昼夜 提交于 2021-01-10 05:34:46
RabbitMQ与SpringBoot整合 RabbitMQ SpringBoot 一.RabbitMQ的介绍 二.Direct模式 三.Topic转发模式 四.Fanout Exchange形式 一.RabbitMQ的介绍 RabbitMQ是消息中间件的一种,消息中间件即分布式系统中完成消息的发送和接收的基础软件.这些软件有很多,包括ActiveMQ(apache公司的),RocketMQ(阿里巴巴公司的,现已经转让给apache). 消息中间件的工作过程可以用生产者消费者模型来表示.即,生产者不断的向消息队列发送信息,而消费者从消息队列中消费信息.具体过程如下: 从上图可看出,对于消息队列来说,生产者,消息队列,消费者是最重要的三个概念,生产者发消息到消息队列中去,消费者监听指定的消息队列,并且当消息队列收到消息之后,接收消息队列传来的消息,并且给予相应的处理.消息队列常用于分布式系统之间互相信息的传递. 对于RabbitMQ来说,除了这三个基本模块以外,还添加了一个模块,即交换机(Exchange).它使得生产者和消息队列之间产生了隔离,生产者将消息发送给交换机,而交换机则根据调度策略把相应的消息转发给对应的消息队列.那么RabitMQ的工作流程如下所示: 紧接着说一下交换机.交换机的主要作用是接收相应的消息并且绑定到指定的队列.交换机有四种类型,分别为Direct

Springboot整合RabbitMQ

核能气质少年 提交于 2021-01-10 04:59:52
1、简介 RabbitMQ 即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分发的作用。 2、创建一个springboot的项目 3、添加RabbitMQ依赖 < dependency > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-starter-amqp </ artifactId > </ dependency > 4、在application.yml中配置RabbitMQ spring rabbitmq : host : 127.0.0.1 port : 5672 username : hxj password : 123hanxujie publisher-confirms : true virtual-host : / 5、创建一个rabbitMQ配置类(这个一定要看明白) /** * FileName: Application * Author: 韩旭杰 * Date: 2019/2/13 10:42 * Description: 该类初始化创建队列、转发器,并把队列绑定到转发器 */ package com.example.springboot.rabbitmq; import org.slf4j.Logger; import

Rabbitmq_03 Publish/Subscribe

醉酒当歌 提交于 2021-01-10 00:03:49
  发布订阅模式,一条消息可被多个接收者接收。注意在上一篇的tasks模式中,虽然有多个接收者,但每条消息还是只被一个接收者接收的。 发送者 # !/usr/bin/env python import pika import sys connection = pika.BlockingConnection(pika.ConnectionParameters(host= ' localhost ' )) channel = connection.channel() # 指定了exchange的type channel.exchange_declare(exchange= ' logs ' , exchange_type = ' fanout ' ) message = ' ' .join(sys.argv[1:]) or " info: Hello World! " channel.basic_publish(exchange = ' logs ' , routing_key = '' , body = message) print ( " [x] Sent %r " % message) connection.close() 接收者 # !/usr/bin/env python import pika connection = pika.BlockingConnection

RabbitMQ入门:发布/订阅(Publish/Subscribe)

懵懂的女人 提交于 2021-01-09 07:46:40
在前面的两篇博客中 RabbitMQ入门:Hello RabbitMQ 代码实例 RabbitMQ入门:工作队列(Work Queue) 遇到的实例都是 一个消息只发送给一个消费者(工作者) ,他们的消息模型分别为(P代表生产者,C代表消费者,红色代表队列): 这次我们来看下将 一个消息发送给多个消费者(工作者) ,这种模式一般被称为“发布/订阅”模式。其工作模型为(P代表生产者,X代表Exchange(路由器/交换机),C代表消费者,红色代表队列): 我们发现,工作模型中首次出现路由器,并且每个消费者有单独的队列。生产者生成消息后将其发送给路由器,然后路由器转送到队列,消费者各自到自己的队列里面获取消息进行消费。在实际的应用场景中, 生产者一般不会直接将消息发送给队列,而是发送给路由器进行中转 ,Exchange必须清楚的知道怎么处理收到的消息:是将消息发送到一个特定队列还是多有队列,或者直接废弃消息。这种才符合 RabbitMQ消息模型的核心思想 。 接下来我们详细展开今天的话题: 一、Exchange Exchange在我们的工作模型中首次出现,因此需要详细介绍下。 Exchange分为4种类型: Direct:完全根据key进行投递的,例如,绑定时设置了routing key为”abc”,那么客户端提交的消息,只有设置了key为”abc”的才会投递到队列。 Topic

RabbitMQ

喜夏-厌秋 提交于 2021-01-09 02:51:49
注:本文为翻译 原文地址: https://www.rabbitmq.com/tutorials/tutorial-three-java.html 发布 / 订阅 在前一章中,我们创建了工作队列。工作队列背后的假设是,每个任务只交付给一个工作者。在这一部分中,我们将做一些完全不同的事情:我们将向多个消费者传递消息,这种模式称为「发布 / 订阅」 为了演示该模式,我们将构建一个简单的日志系统,它将由两个程序组成:第一个程序将发出日志消息,第二个程序将接受并打印它们。 在我们的日志系统中,接收程序的每个运行副本都将获得消息。这样我们就可以运行一个接收器并将日志定向到磁盘,同时,我们可以运行另一个接收器在屏幕上看到日志。 实际上,发布的日志消息将广播给所有接收方。 交换器 在前一几章,我们向队列发送和接收消息。现在是时候在 Rabbit 中引入完整的消息模型了。 让我们快速回顾一下我们在之前的章节中介绍的内容: 生产者是发送消息的用户应用程序 队列是存储消息的缓冲区 消费者是接收消息的用户应用程序 RabbitMQ 中消息模型的核心思想是:生产者从不直接向队列发送任何消息。实际上,生产者通常根本不知道消息是否会被传递到任何队列。 相反,生产者只能向交换器发送消息。交换是一件很简单的事情。一方面,它接收来自生产者的消息,另一个方面,它将消息推送到队列中

rabbitmq发布订阅

假如想象 提交于 2021-01-03 08:14:32
rabbitmq发布订阅 记得关注作者哦,关注不迷路! 一、发布订阅模式 还记得我们上一个文章是如何发布消息的吗? 回顾一下以前是如何发送消息的: channel.basicPublish( "" , QUEUE_NAME, null , message.getBytes()); 对的,以前我们发送消息是直接由生产者将消息发送到队列,可是这种方式官方是不推荐的! RabbitMQ消息传递模型中的核心思想是生产者从不将任何消息直接发送到队列。实际上,生产者经常甚至根本不知道是否将消息传递到任何队列。 相反,生产者只能将消息发送到 交换机 。交流是一件非常简单的事情。一方面,它接收来自生产者的消息,另一方面,将它们推入队列。交易所必须确切知道如何处理收到的消息。是否应将其附加到特定队列?是否应该将其附加到许多队列中?还是应该丢弃它。规则由 交换类型 定义 。 你可以将交换机想象成一个分发器更好容易理解, 消息生产者你可以理解为皇帝,他所下发的命令都由圣旨传递,皇帝当然不可能亲自去送圣旨,所以这个工作由太监来承担,这里的太监就是交换机,由太监根据圣旨类型送到文武百官手里,这里文武百官也就是消费者。 大概看一下流程图: img 其中 X 就是交换机 交换机类型大概有: direct: 直连交换机 根据RouteKey转发到队列 任何发送到Direct