Fanout

rabbitmq学习记录(五)交换机Exchange-fanout

一世执手 提交于 2019-12-06 10:55:20
之前学习的都是一条消息发给一个消费者,下面开始记录如何把一条信息发给多个消费者 这边我们用到了交换机Exchange 交换机模式:fanout 模式特点:生产者把消息发送给Exchange之后,Exchange则会把这些消息添加到与自己绑定的所有队列之中,监听这些队列的消费者就可以收到这些消息。 注:Exchange并不能保存信息,如果没有绑定的队列,那么生产者发送数据就会丢失,只有队列才能存储生产者的消息。 生产者:声明交换机后指定交换机模式fanout package com.example.demo.queue.exchangeToQueue.fanout; import java.io.IOException; import java.util.concurrent.TimeoutException; import com.example.demo.utils.ConnectionUtil; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; public class Producer { // exchange名称 private static final String EXCHANGE_NAME = "exchange_fanout"; public static void

rabbitmq学习记录(六)交换机Exchange-direct

﹥>﹥吖頭↗ 提交于 2019-12-06 10:54:45
实现功能:一条消息发送给多个消费者 交换机模式:direct 相比于之前的fanout模式,可以进一步的筛选获取消息的消费者。 fanout模式下,只要消费者监听的队列,已经与接收生产者消息的交换机绑定,那消费者就能收到消息。 direct模式下,消费者监听的队列,不仅需要已经与接收生产者消息的交换机进行绑定,而且绑定交换机时指定的routingKey要匹配生产者发送消息时指定的routingKey(完全匹配)。 生产者: package com.example.demo.queue.exchangeToQueue.direct; import java.io.IOException; import java.util.concurrent.TimeoutException; import com.example.demo.utils.ConnectionUtil; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; public class Producer { private static final String EXCHANGE_NAME = "exchange_direct"; public static void main(String[] args) {

(翻译)RabbitMQ Java Client教程(四)路由

妖精的绣舞 提交于 2019-12-05 15:05:58
原文地址: https://www.rabbitmq.com/tutorials/tutorial-four-java.html 在前一篇教程中我们构建了一个日志系统。现在我们知道如何把日志消息广播发送给多个接受者了。 在本篇教程中我们将增加一个功能——允许订阅者只获取它感兴趣得一部分消息。比如我们仅把严重错误的日志存储到日志文件,而将所有的日志消息都打印到控制台。 绑定 在之前的章节中我们已经创建过交换器和队列的绑定。你可能还记得下边的代码: channel.queueBind(queueName, EXCHANGE_NAME, ""); 绑定表示交换器和队列之间的一种关系。这可以简单描述为:队列只对这个交换器的消息感兴趣。 绑定关系可以使用一个额外的==routingKey==参数。为了避免与==basic_publish==中的参数混淆,在这里我们叫它==binding key==。下边是我们使用一个key参数创建绑定关系的代码: channel.queueBind(queueName, EXCHANGE_NAME, "black"); binding key的作用于交换器的类型有关。我们之前使用的fanout交换器,会直接忽略该参数。 Direct 交换器 我们前一篇教程的日志系统会广播消息给所有的消费者。现在我们要扩展这个系统,使它可以根据消息的严重程度进行过滤

(翻译)RabbitMQ Java Client教程(三)发布/订阅

馋奶兔 提交于 2019-12-05 12:02:06
原文地址: https://www.rabbitmq.com/tutorials/tutorial-three-java.html 在前一篇教程中我们创建了一个工作队列。工作队列假设每个消息只会分发给一个消费者。在本篇教程中我们将会做一些完全不同的事情——发送同一条消息给多个消费者。这种模式被称为“发布/订阅”。 为了描述这种模式,我们将会构建一个简单的日志系统。它包含两个程序——一个发送日志消息,另一个接收并打印这些消息。 在我们的日志系统中每一个接收程序都会获取到这些消息。通过这种方式我们可以启动一个消费者将日志记录到磁盘,然后启动另一个消费者将日志输出到屏幕上。 实际上,发布的日志消息将会广播给所有的消费者。 交换器 在前几篇教程中,我们都是直接通过队列发送和接收消息。现在是时候引入RabbitMQ中完整的消息传递模型了。 让我们快速回顾一下先前教程中介绍的内容: 生产者 是发送消息的用户程序 队列 是存储消息的缓冲区 消费者 是接收消息的用户程序 RabbitMQ消息传递模型中的核心思想是生产者从不将任何消息直接发送到队列。事实上,通常情况下生产者甚至不知道一条消息是否会被发送到一个队列。 相反,生产者只能将消息发送给交换器。交换器是一种非常简单的东西。一方面,它接收生产者发送的消息;另一方面,它把消息推送给队列。交换器必须明确的知道当收到一条消息的时候需要做什么

探索解析微服务下的RabbitMQ

二次信任 提交于 2019-12-04 08:39:39
概览 本文主要介绍如何使用RabbitMQ消息代理来实现分布式系统之间的通信,从而促进微服务的松耦合。 RabbitMQ ,也被称为开源消息代理,它支持多种消息协议,并且可以部署在分布式系统上。它轻量级,便于部署应用程序。它主要充当一个队列,其中输入的消息可以首先被操作。RabbitMQ可以在许多操作系统和云环境中运行,并为大多数流行语言提供了广泛的开发工具。它是生产者-消费者模式,生产者发出信息,消费者消费信息。RabbitMQ的主要特点如下: 异步消息 分布式部署 管理和监控 企业和云计算 安装 对于RabbitMQ,首先需要在系统中安装ErLang,因为RabbitMQ是用ErLang语言编写的。安装Erlang之后,你可以通过下面的介绍从它的官网下载最新版本的 RabbitMQ 。 在微服务中使用RabbitMQ 在您的微服务体系结构中,RabbitMQ是实现消息队列的最简单的免费的可用选项之一。这些队列模式有助于解耦各个微服务之间的通信来增加应用程序的弹性。我们可以将这些队列用于各种目的,比如核心微服务之间的交互、微服务的解耦、实现故障转移机制,以及通过消息代理发送电子邮件通知。 无论在哪里,只要有两个或两个以上的核心模块需要相互通信,我们就不应该进行直接的HTTP调用,因为它们会使核心层产生紧耦合,并且当每个核心模块有更多实例时将很难管理。而且每当服务宕机时

SpringBoot整合RabbitMQ消息队列-学习笔记

生来就可爱ヽ(ⅴ<●) 提交于 2019-11-30 23:54:37
SpringBoot整合RabbitMQ消息队列-学习笔记 2018年08月30日 14:50:50 Calon Mo 阅读数 3672 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/kevinmcy/article/details/82221297 前言 本篇文章主要用于记录个人学习RabbitMQ的过程,记录下来方便日后查看,如有错误的地方,还望指正。 本篇文章比较详细地记录本人在学习过程中的每一个步骤,比较适合对RabbitMQ不熟的同学学习,跟着本文操作一遍,就可以大概知道RabbitMQ的基础知识了。 准备阶段 首先把RabbitMQ环境安装好,下面再详细介绍RabbitMQ各个知识点和如何使用。 由于是基于Centos7的操作系统安装RabbitMQ-3.7.7。 为了方便操作,先把防火墙干掉,生产环境当然不能这么干,个人学习随意,以下是相关命令: centos7关闭并禁止防火墙启动命令: systemctl stop firewalld systemctl disable firewalld RabbitMQ安装 这里介绍一种比较简单的安装方法-依赖安装,不用单独安装erlang等依赖。 首先到RabbitMQ官网下载:http://www

SpringBoot 操作RabbitMQ

时光毁灭记忆、已成空白 提交于 2019-11-30 06:11:38
一、RabbitMQ 介绍 AMQP(Advanced Message Queuing Protocol,高级消息队列协议)是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。 AMQP 的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。 RabbitMQ 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,支持多种客户端,如 Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP 等,支持 AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。 1. 相关概念 通常我们谈到队列服务,会有三个概念:发消息者、队列、收消息者。RabbitMQ 在这个基本概念之上,多做了一层抽象, 在发消息者和队列之间加入了交换器(Exchange) 。这样发消息者和队列就没有直接联系,转而变成发消息者把消息给交换器,交换器根据调度策略再把消息再给队列。 左侧 P 代表生产者,也就是往 RabbitMQ 发消息的程序。 中间即是 RabbitMQ,其中包括了交换机和队列。 右侧 C 代表消费者,也就是往 RabbitMQ 拿消息的程序。 那么,其中比较重要的概念有 4 个,分别为:虚拟主机、交换机

Spring Boot配置多套RabbitMQ

坚强是说给别人听的谎言 提交于 2019-11-29 08:01:41
背景介绍: 为什么要单独来讲解SpringBoot如何配置RabbitMQ? 因为在项目中,有可能会用到多套RabbitMQ,如果只用一套那则用SpringBoot自带的配置就可以了,但多套则不行,需要自行配置。 说明:在这就详解RabbitMq相关内容了: --- direct:只匹配对应队列(相当于1对1) queue --(routingkey)-->exchange --> --- fanout:转发消息到所有绑定队列(相当与一对多) --- topic:按规则转发消息(最灵活) --- header:设置header attribute参数类型的交换机 不太懂的请百度,不赘述了。 配置方式: 方式1 SpringBoot自带配置: #spring boot配置 spring.rabbitmq.host=192.168.10.20 spring.rabbitmq.port=5672 spring.rabbitmq.username=admin spring.rabbitmq.password=123456 代码: @Configuration public class RabbitConfiguration { @Bean public Queue Queue() { return new Queue("demo"); } } public class

springboot 集成rabbitmq 并采用ack模式 以及封装队列定义

血红的双手。 提交于 2019-11-29 08:01:19
rabbitmq简介 rabbitmq 是spring所在公司Pivotal自己的产品 是基于AMQP高级队列协议的消息中间件 采用erlang开发 因此安装需要erlang环境 具体安装根据自己的环境 因为跟spring有共同的血缘关系 所以spring 全家桶对其的支持应该是相当完善的 简单概念 一般消息队列 都是生产者将消息发送到队列 消费者监听队列进行消费 rabbitmq 一个虚拟主机(默认 /)持有一个或者多个交换机(Exchange) 用户只能在虚拟主机的粒度进行权限控制 交换机根据一定的策略(RoutingKey)绑定(Binding)到队列(Queue)上 这样生产者和队列就没有直接联系 而是将消息发送的交换机 交换机再把消息转发到对应绑定的队列上 此处需要详细熟悉rabbitmq的工作流程 不清楚可以找相关资料进行学习 上面说了 Exchange 作为rabbitmq的一个独特的重要的概念 这里有必要着重强调一下 我们从 spring对rabbitmq的封装来解读一下这个东西 package org.springframework.amqp.core; /** * Constants for the standard Exchange type names. * * @author Mark Fisher * @author Gary Russell */

好程序员Java学习资源分享RabbitMQ介绍

半世苍凉 提交于 2019-11-29 00:34:45
好程序员Java学习资源分享RabbitMQ介绍,前言,RabbitMQ是基于AMQP协议(Advanced Message Queue Protocol)的消息中间件 什么是消息队列 消息队列属于进程间通信的一种方式,使用消息队列可以通过异步方式处理数据,借此可以提高系统性能。我们可以把消息当作存放数据的容器,消息的消费者可以从队列中获取数据,进行处理。常见的消息队列有:ActiveMQ,RabbitMQ,Kafka,RocketMQ等。 RabbitMQ中用到基本概念 Broker:消息队列的服务器实体    Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列    Queue:消息队列载体,每个消息都会被投入到一个或多个队列    Binding:绑定,它主要是把exchange和queue按照路由规则绑定起来    Routing Key:路由关键字,exchange根据这个关键字进行消息投递    vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离    producer:消息生产者,投递消息的程序    consumer:消息消费者,接收消息的程序    channel:消息通道,在客户端的每个连接里,可以建立多个channel,每个channel代表一个会话任务 RabbitMQ中消息模式 1 简单队列