direct

SpringBoot使用消息中间件RabbitMQ

試著忘記壹切 提交于 2019-11-30 21:54:50
首先在docker中安装rabbitmq,pull 带有web界面的 docker pull rabbitmq :3-management 5672为客户端,15672为web界面端口 docker run -d -p 5672 : 5672 -p 15672 : 15672 -- name rabbitmq01 镜像id 简要介绍一下rabbitmq的三个Exchange Fanout( 广播) 绑定queue时,不用设置routkey 发布消息时,不用设置routkey Direct (点对点,单播) 绑定queue时,设置routkey 发布消息时,设置routkey,单播 Topic 绑定queue时,使用包含* 和#的表达式 #代表一个或多个单词 *代表一个单词 发布消息时,绑定queue的表达式中,匹配到的queue 则收到消息 接下来在springboot项目中使用rabbitmq 在pom.xml中引入依赖 < dependency > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-starter-amqp </ artifactId > </ dependency > < dependency > < groupId > org

springboot集成rabbitmq实战

拈花ヽ惹草 提交于 2019-11-30 21:54:28
RabbitMQ介绍 RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。RabbitMQ主要是为了实现系统之间的双向解耦而实现的。当生产者大量产生数据时,消费者无法快速消费,那么需要一个中间层。保存这个数据。 AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全 通常我们谈到队列服务, 会有三个概念: 发消息者、队列、收消息者,RabbitMQ 在这个基本概念之上, 多做了一层抽象, 在发消息者和 队列之间, 加入了交换器 (Exchange). 这样发消息者和队列就没有直接联系, 转而变成发消息者把消息给交换器, 交换器根据调度策略再把消息再给队列 虚拟主机:一个虚拟主机持有一组交换机、队列和绑定。为什么需要多个虚拟主机呢?很简单,RabbitMQ当中,用户只能在虚拟主机的粒度进行权限控制。 因此,如果需要禁止A组访问B组的交换机/队列/绑定,必须为A和B分别创建一个虚拟主机

08-rabbitmq-消息路由-spring

血红的双手。 提交于 2019-11-30 21:44:48
08-rabbitmq-消息路由-spring 【博文总目录>>>】 【工程下载>>>】 先决条件 本教程假定RabbitMQ已在标准端口(5672)上的localhost上安装并运行。如果使用不同的主机,端口或凭据,连接设置将需要调整。 消息路由 在上一个教程中,我们构建了一个简单的扇出交换。我们能够向许多接收器广播消息。 在本教程中,我们将为其添加一个功能 - 我们将只能订阅一部分消息。例如,我们将能够仅将消息指向感兴趣的某些颜色(“橙色”,“黑色”,“绿色”),同时仍然能够在控制台上打印所有消息 绑定 在之前的例子中,我们已经创建了绑定。您可以在我们的Tut3Config文件中回忆一下这样的代码: @Bean public Binding binding1 (FanoutExchange fanout, Queue autoDeleteQueue1) { return BindingBuilder.bind(autoDeleteQueue1).to(fanout); } 绑定是交换器和队列之间的关系。这可以简单地读为:队列对来自此交换器的消息感兴趣。 绑定可以占用一个额外的路由密钥参数。Spring-amqp使用流畅的API来使这种关系非常清楚。我们将交换器和队列传入到BindingBuilder,并将队列“路由密钥”绑定到“交换机”,如下所示: @Bean public

.Net使用RabbitMQ详解

梦想与她 提交于 2019-11-30 13:33:50
1、RabbitMQ简解 RabbitMQ是消息代理:它接受并转发消息。 您可以将其视为邮局:将要发布的邮件放在邮箱中时,可以确保Mailperson先生或女士最终将邮件传递给收件人。 以此类推,RabbitMQ是一个邮箱,一个邮局和一个邮递员。 RabbitMQ与邮局之间的主要区别在于,它不处理纸张,而是接收,存储和转发数据 消息的 二进制斑点 。 2、RabbitMQ使用 生产仅 意味着发送。 发送消息的程序是 生产者 . 队列 是RabbitMQ内部的邮箱的名称。 尽管消息流经RabbitMQ和您的应用程序,但它们只能存储在 队列中 。 甲 队列 仅由主机的存储器&磁盘限制约束,它本质上是一个大的消息缓冲器。 许多 生产者 可以发送进入一个队列的消息,许多 消费者 可以尝试从一个 队列 接收数据 。 这就是我们表示队列的方式. 消费 与接收具有相似的含义。 一个 消费者 是一个程序,主要是等待接收信息. 生产者,消费者和经纪人不必位于同一主机上。实际上,在大多数应用程序中却没有。一个应用程序既可以是生产者,也可以是消费者。 消息从生产到 消费的流程 RabbitMQ中Exchange 的类型 类型有4种, direct,fanout,topic,headers 。 类型的使用:Exchange与队列进行绑定后,消息根据exchang的类型

RebbitMQ

回眸只為那壹抹淺笑 提交于 2019-11-30 09:13:26
核心概念 Producer:消息生产者,即投递消息的程序。 Broker:消息队列服务器实体。单个机器可以部署多个Broker Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。 Binding:绑定,它的作用就是把 Exchange 和 Queue 按照路由规则绑定起来。 Queue:消息队列载体,每个消息都会被投入到一个或多个队列。 Consumer:消息消费者,即接受消息的程序。 Exchange 收到消息时,他是如何知道需要发送至哪些 Queue 呢?这里就需要了解 Binding 和 RoutingKey 的概念: Binding 表示 Exchange 与 Queue 之间的关系,我们也可以简单的认为队列对该交换机上的消息感兴趣,绑定可以附带一个额外的参数 RoutingKey。Exchange 就是根据这个 RoutingKey 和当前 Exchange 所有绑定的 Binding 做匹配,如果满足匹配,就往 Exchange 所绑定的 Queue 发送消息,这样就解决了我们向 RabbitMQ 发送一次消息,可以分发到不同的 Queue。RoutingKey 的意义依赖于交换机的类型。 Exchange 的三种主要类型: Fanout(广播) 、 Direct(直接) 和 Topic(通配符匹配) Fanout Exchange 会忽略

Direct I/O

不打扰是莪最后的温柔 提交于 2019-11-29 21:41:06
通常情况下,大多数I/O操作在内核层次上都会进行数据缓冲,以提高性能。然后,有些情况下,直接对用户空间的缓冲区进行I/O读写操作可能更能提高性能和数据传输速率,特别针对大数据传递的情形,这样将省去了将数据从内核空间复制到用户空间的操作,从而节省了传输时间。 当然,在使用Direct I/O之间,也有必要了解下它的一些开销,毕竟,天下没有免费的午餐。 首先,启用Direct I/O,意味着将失去Buffered I/O的一切好处。其次,Direct I/O要求write系统调用必须同步执行,否则应用程序将不知道何时可重用它的I/O Buffer。很明显,这将影响应用程序的速度。不过,也有补救措施,即在这种情况下,一般都会同时使用异步I/O操作。 实现Direct I/O的核心函数是get_user_pages, 它的原形如下: int get_user_pages(struct task_struct *tsk, // current struct mm_struct *mm, // current->mm. unsigned long start, // start is the (page-aligned) address of the user-space buffer int len, // len is the length of the buffer in pages.

构造者设计模式

不羁岁月 提交于 2019-11-29 01:55:41
构造者设计模式 构造者模式又叫创造者模式,是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。创建者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加以抽象,通过子类继承或者重载的方式,动态的创建具有复合属性的对象。 这个说法有点官方,简单来说,有一个对象创建过程很复杂,我们采用构造者模式,可以将这个复杂的创建过程隐藏起来,而且可以通过构建者,来实现对象创建的多元化 举个例子,比如电脑的创建过程,需要创建CPU,硬盘,屏幕,主机,内存,适配器,键盘等等一系列小对象,最后才能构建出一个电脑对象也就是如果创建一个电脑对象的通常的做法,是这样编写我们的代码: new Computer(new CPU(),new 屏幕(),new 硬盘(),new 内存(),new 主机(),new 内存(),new 适配器()) 这样创建对象变得非常不容易,还有可能有电脑对象有两个cpu,两个内存,这样对象创建就更复杂,构造者设计模式就是解决复杂对象的创建,以及对象创建的多元化而诞生的 1.建造者角色(Builder) 对复杂对象的创建过程加以抽象,给出一个抽象接口,以规范产品对象的各个组成部分的建造。这个接口规定了要实现复杂对象的哪个部分的创建,但并不涉及具体对象不见的创建。 2.具体创建者角色(ConcreateBuilder) 实现Builder接口

SpringBoot简单使用RabbitMQ消息组件

[亡魂溺海] 提交于 2019-11-28 10:56:11
1 在虚拟机中安装rabbitmq 2 开启rabbitmq 3 页面查看rabbitmq 3 rabbitmq相关知识点讲解 [1] MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。MQ是消费-生产者模型的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取队列中的消息。 1、队列、生产者、消费者 队列:mq内部存储信息的 生产者:产生信息的 消费者:消费消息的 2、Exchange、Binding exchange:交换器,交换按照一定规则与对列绑定,消息才能到queue中 Binding用routing key 3、Exchange Type有四种 RabbitMQ常用的Exchange Type有三种:fanout、direct、topic。headers不常用。 fanout:把所有发送到该Exchange的消息投递到所有与它绑定的队列中。将消息发送与该exchange绑定的所有的对列,不需要比较路由键 direct:把消息投递到那些binding key与routing key完全匹配的队列中。要求路由键与对列名完全匹配 topic:将消息路由到binding key与routing key模式匹配的队列中。用#匹配0或者多个,*匹配一个 4 下面简单实现下图的结果 1 创建direct类型的交换器 2 创建

5 交换机-direct (路由)

左心房为你撑大大i 提交于 2019-11-28 04:12:30
目录 路由 1、绑定 2、direct 类型exchange 3、多重绑定 4、示例代码 4.1、生产者 4.2、消费者 路由 上文中的 exchange 类型是 fanout 的,该类型的 exchange 会把消息发送给所有绑定到该 exchange 的 queue 现在我们需要添加一个特性,只订阅( subscribe )一部分指定的消息( Message ) 1、绑定 在前面的例子中,我们已经在创建绑定。您可能会记得以下代码: // 绑定消息路由和消息队列 // 第一个参数:队列名称 // 第二个参数:交换器名称 channel.queueBind(queueName, EXCHANGE_NAME, ""); 绑定( bindings )是交换( exchange )和队列( queue )之间的关系。这可以简单地理解为:队列对来自此交换的消息感兴趣; Binding 可以使用一个已经存在的 routingKey 参数。为了避免和 basic_publish 参数混淆,我们称之为 binding key 。下边就是我们怎么用key来创建一个 binding ; // 绑定消息路由和消息队列 // 第一个参数:队列名称 // 第二个参数:交换器名称 // 第三个参数:路由键 channel.queueBind(queueName, EXCHANGE_NAME, "");