exchange

rabbitmq学习

纵然是瞬间 提交于 2020-01-25 05:27:57
创建rabbitMQ的连接 public class ConnectionUtil { public static Connection getConnection ( ) throws IOException , TimeoutException { ConnectionFactory connectionFactory = new ConnectionFactory ( ) ; //设置服务器地址 connectionFactory . setHost ( "127.0.0.1" ) ; //设置端口 connectionFactory . setPort ( 5672 ) ; //设置vHost 就相当于mysql的数据库名 connectionFactory . setVirtualHost ( "/vhost_admin" ) ; //设置用户名 connectionFactory . setUsername ( "admin" ) ; connectionFactory . setPassword ( "admin" ) ; return connectionFactory . newConnection ( ) ; } } 简单队列 生产者 public class Send { public static final String QUEUE_NAME =

Rabbit延迟队列实战

帅比萌擦擦* 提交于 2020-01-25 03:31:38
一 代码 1 生产者延迟3秒发送消息到死信队列代码,此时queue.normal队列充当的是延迟队列 package com.rabbitmq.ttl; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; import com.rabbitmq.client.MessageProperties; import com.rabbitmq.util.ConnectionUtils; import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.concurrent.TimeoutException; /** * 死信队列(路由键为rk的消息过期后被放置到死信队列) */ public class DealQueue { private static final String IP_ADDRESS = "127.0.0.1"; private static final int PORT = 5672;//RabbitMQ(AMQP) 服务端默认端口号为 5672 public

rabbitMQ队列使用及常用命令

房东的猫 提交于 2020-01-24 00:47:01
一、RabbitMQ常用命令 启动监控管理器: rabbitmq-plugins enable rabbitmq_management 关闭监控管理器: rabbitmq-plugins disable rabbitmq_management 启动rabbitmq: rabbitmq-service start 关闭rabbitmq: rabbitmq-service stop 查看所有的队列: rabbitmqctl list_queues 清除所有的队列: rabbitmqctl reset 关闭应用: rabbitmqctl stop_app 启动应用: rabbitmqctl start_app 用户和权限设置(后面用处) 添加用户: rabbitmqctl add_user username password 分配角色: rabbitmqctl set_user_tags username administrator 新增虚拟主机: rabbitmqctl add_vhost vhost_name 将新虚拟主机授权给新用户: rabbitmqctl set_permissions -p vhost_name username '.*' '.*' '.*' 角色说明 none 最小权限角色 management 管理员角色 policymaker 决策者

RabbitMQ(4) 未路由的消息、TTL和死信

北慕城南 提交于 2020-01-23 23:05:48
未路由的消息 当生产这发送的消息到达指定的交换器后,如果交换器无法根据自身类型、绑定的队列以及消息的路由键找到匹配的队列,默认情况下消息将被丢弃。可以通过两种方式 处理这种情况,一是在发送是设置mandatory参数,二是通过备份交换器。 设置mandatory参数 在发送消息是,可以设置mandatory参数未true,这样当消息在交换器上无法被路由时,服务器将消息返回给生产者,生产者实现回调函数处理被服务端返回的消息。 public class NoRouteMessage { private static String QUEUE = "unreachable_queue"; private static String EXCHANGE = "unreachable_exchange"; private static String BINDING_KEY = "fake_key"; public static void main(String[] args) throws IOException, TimeoutException { ConnectionFactory cf = new ConnectionFactory(); Connection connection = cf.newConnection(); Channel channel = connection

RabbitMQ延时任务

╄→尐↘猪︶ㄣ 提交于 2020-01-23 23:04:21
概念: 消息的TTL(Time To Live) 消息的TTL就是消息的存活时间。RabbitMQ可以对队列和消息分别设置TTL。对队列设置就是队列没有消费者连着的保留时间,也可以对每一个单独的消息做单独的设置。超过了这个时间,我们认为这个消息就死了,称之为死信。 如果队列设置了,消息也设置了,那么会取小的。所以一个消息如果被路由到不同的队列中,这个消息死亡的时间有可能不一样(不同的队列设置)。这里单讲单个消息的TTL,因为它才是实现延迟任务的关键。 可以通过设置消息的expiration字段或者x-message-ttl属性来设置时间,两者是一样的效果。 消息扔到队列中后,过了设置的限定时间,如果没有被消费,它就死了。不会被消费者消费到。这个消息后面的,没有“死掉”的消息对顶上来,被消费者消费。 死信在队列中并不会被删除和释放,它会被统计到队列的消息数中去 。单靠死信还不能实现延迟任务,还要靠Dead Letter Exchange。 Dead Letter Exchanges Exchage的概念在这里就不在赘述,可以从这里进行了解。 一个消息在满足如下条件下,会进死信路由,记住这里是路由而不是队列,一个路由可以对应很多队列。 1. 一个消息被Consumer拒收了,并且reject方法的参数里requeue是false。也就是说不会被再次放在队列里,被其他消费者使用。 2.

rabbitmq-01

女生的网名这么多〃 提交于 2020-01-23 22:50:43
MQ 全称为 Message Queue ,即消息队列, RabbitMQ 是由 erlang 语言开发,基于 AMQP ( Advanced Message Queue 高级消息队列协议)协议实现的消息队列,它是一种应用程序之间的通信方法,消息队列在分布式系统开 发中应用非常广泛 应用场景 1 、任务异步处理。 将不需要同步处理的并且耗时长的操作由消息队列通知消息接收方进行异步处理。提高了应用程序的响应时间。 2 、应用程序解耦合 MQ 相当于一个中介,生产方通过 MQ 与消费方交互,它将应用程序进行解耦合 Jms和AMQP区别 JMS 是 java 提供的一套消息服务 API 标准,其目的是为所有的 java 应用程序提供统一的消息通信的标准,类似 java 的 jdbc ,只要遵循 jms 标准的应用程序之间都可以进行消息通信。它和 AMQP 有什么 不同, jms 是 java 语言专属的消 息服务标准,它是在 api 层定义标准,并且只能用于 java 应用;而 AMQP 是在协议层定义的标准,是跨语言的 Broker :消息队列服务进程,此进程包括两个部分: Exchange 和 Queue 。 Exchange :消息队列交换机,按一定的规则将消息路由转发到某个队列,对消息进行过虑。 Queue :消息队列,存储消息的队列,消息到达队列并转发给指定的消费方。

RabbitMQ基本原理初识

Deadly 提交于 2020-01-22 23:32:44
一、背景简介   RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现。AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有很多公开标准(如 COBAR的 IIOP ,或者是 SOAP 等),但是在异步消息处理中却不是这样,只有大企业有一些商业实现(如微软的 MSMQ ,IBM 的 Websphere MQ 等),因此,在 2006 年的 6 月,Cisco 、Redhat、iMatix 等联合制定了 AMQP 的公开标准。   AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。 AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。 RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。 下面将重点介绍RabbitMQ中的一些基础概念,了解了这些概念

认识一下 RabbitMQ

南楼画角 提交于 2020-01-22 09:25:00
分布式系统中,如何在各个应用之间高效的进行通信,是系统设计中的一个关键。 使用 消息代理(message broker) 是一个优雅的解决方案。 RabbitMQ 就是一个被广泛应用的消息代理,遵循 AMQP协议 。 接下来我们就了解一下: Message Broker 概念 AMQP 协议的核心构成 消息转发的 4 种模式 1. Message Broker broker 是经纪人的意思,促成卖方、买方的交易,例如房产经纪人。 消息模型中,有消息的生产者、消费者,就相当于卖方、买方。 所以,也需要一个消息经纪人,这就引出了 message broker 的概念。 message broker 从生产者接收消息,再发送给消费者,这样,生产者、消费者可以完全隔离。 RabbitMQ 就是一个 message broker 。 2. AMQP 具体如何传递消息?要看使用的消息协议。 RabbitMQ 支持多种协议,其中最重要的是 AMQP (Advanced Message Queuing Protocol)。 AMQP 的概念模型很简单,包含3个部分: Queue Binding Exchange 当一个消息发布到 RabbitMQ 后,首先到达 Exchange,然后 Exchange 把消息分配给 Queue,消费者从 Queue 中得到消息。 AMQP 是一个可编程的协议

Exchange 邮件被退信怎么办?

泄露秘密 提交于 2020-01-19 16:12:44
描述: 在Exchange运维中,平时遇到很多用户反馈退信。而Exchange只给你一些错误代码如550 5.1.0 类似此类代码,让你一脸懵逼。有时候你确定问题所在(如、对方邮件服务器宕机、对方设反垃圾邮件网关导致、等等),却无从验证你的观点,下面给大家介绍一下我的解决步骤,以供各位参考。 过程: 1、根据退信内容可以看到对方邮件服务器IP地址。Telnet 对方邮件服务器 25 ,查看对方服务器或端口是否正常开启。 2、输入ehlo 自己的域名 如:ehlo.contoso.com 3、输入MAIL FROM:<XXX@contoso.com> 查看返回的数据是否是550 5.1.0 sender Demied等类似代码,代表次邮箱发信被拒绝 4、输入MAIL FROM:<XXX@qq.com>查看返回的数据是否是250.2.1.0 sender OK,代表从QQ邮箱发送可以到达对方访问器 反思: 此方法用于自己的邮件服务器或域名被对方拉黑或者反垃圾邮件网关拦截。 来源: 51CTO 作者: 桩子尚品 链接: https://blog.51cto.com/11258494/2467835

06 Spring Boot 整合RabbitMQ

六眼飞鱼酱① 提交于 2020-01-19 04:50:43
6. Spring 整合RabbitMQ 6.1. 搭建生产者工程 6.1.1. 创建工程 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nRET1n6r-1578323120296)(F:\learning\javaee\笔记\第五阶段\04RabbitMQ\06 Spring Boot 整合RabbitMQ\img\1565149342994.png)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-egWNK3ug-1578323120297)(F:\learning\javaee\笔记\第五阶段\04RabbitMQ\06 Spring Boot 整合RabbitMQ\img\1565144326498.png)] 6.1.2. 添加依赖 修改pom.xml文件内容为如下: <?xml version="1.0" encoding="UTF-8"?> < project xmlns = " http://maven.apache.org/POM/4.0.0 " xmlns: xsi = " http://www.w3.org/2001/XMLSchema-instance " xsi: schemaLocation = " http://maven.apache.org/POM/4.0.0 http:/