exchange

RebbitMQ实战教程

瘦欲@ 提交于 2019-11-30 21:27:30
版权声明:本文欢迎转载! https://blog.csdn.net/zpcandzhj/article/details/81436980 </div> <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-f57960eb32.css"> <div id="content_views" class="markdown_views prism-atom-one-dark"> <!-- flowchart 箭头图标 勿删 --> <svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path> </svg> <p>如果此教程对您有帮助,就请有钱的捧个钱场,没钱的捧个人场(转载分享)哦~</p> 文章目录 RabbitMQ实战教程 1.什么是MQ 2.RabbitMQ 2.1.RabbitMQ的简介 2.2.官网 2.3

RabbitMQ基础教程

时光总嘲笑我的痴心妄想 提交于 2019-11-30 21:25:02
下载和安装(3.6版本) rabbitmq和erlang的版本关系,2者版本必须要一致,不然各种问题 https://www.rabbitmq.com/which-erlang.html 我装的rabbitmq的版本是3.6.10 erlang的版本是19.3 下载erlang wget http://erlang.org/download/otp_src_19.3.tar.gz tar -xvf otp_src_19.3.tar.gz cd otp_src_19.3 ./configure --prefix = /opt/soft/erlang make make install 配置环境变量 vim /etc/profile export ERLANG_HOME = /opt/soft/erlang export PATH = $PATH : $ERLANG_HOME /bin source /etc/profile 验证是否正常安装,正常输出版本则正确 [ root@VM_0_14_centos soft ] # erl Erlang / OTP 19 [ erts - 8.3 ] [ source ] [ 64 - bit ] [ smp : 2 : 2 ] [ async - threads : 10 ] [ hipe ] [ kernel - poll : false

RabbitMQ基础教程之使用进阶篇

Deadly 提交于 2019-11-30 21:24:30
RabbitMQ基础教程之使用进阶篇 相关博文,推荐查看: RabbitMq基础教程之安装与测试 RabbitMq基础教程之基本概念 RabbitMQ基础教程之基本使用篇 I. 背景 前一篇基本使用篇的博文中,介绍了rabbitmq的三种使用姿势,可以知道如何向RabbitMQ发送消息以及如何消费,但遗留下几个疑问,本篇则主要希望弄清楚这几点 Exchange声明的问题(是否必须声明,如果不声明会怎样) Exchange声明的几个参数(durable, autoDelete)有啥区别 当没有队列和Exchange绑定时,直接往队列中塞数据,好像不会有数据增加(即先塞数据,然后创建queue,建立绑定,从控制台上看这个queue里面也不会有数据) 消息消费的两种姿势(一个主动去拿数据,一个是rabbit推数据)对比 II. 基本进阶篇 1. Exchange默认场景 将前面的消息发送代码捞出来,干掉Exchange的声明,如下 public class DefaultProducer { public static void publishMsg (String queue, String message) throws IOException, TimeoutException { ConnectionFactory factory = RabbitUtil

activemq、rabbitmq、kafka原理和比较

a 夏天 提交于 2019-11-30 21:22:53
一、activemq 虽然是java写的消息队列,但是提供Java, C, C++, C#, Ruby, Perl, Python, PHP各种客户端,所以语言上是没什么问题的。配置和使用,基本上是java xml这一套。同时对jms、spring之类的支持很友好。 而且因为是Java写的,所以可以作为一个jar包,放到java项目里,用代码启动和配置,这个对于java开发者而言是不是相当爽?毕竟还是有些场景,需要我们把队列放到自己项目内部,随项目启动而启动的。而且,还可以类似拓展tomcat一样,自己写java的plugin来拓展activemq。比如说,我有10万硬件连到mq上,这10万设备每个都有用户名密码,这个时候我们可以用java写个权限验证,从数据库里查这10万用户名密码。 activemq支持主从复制、集群。但是集群功能看起来很弱,只有failover功能,即我连一个失败了,可以切换到其他的broker上。这一点貌似不太科学。假设有三个broker,其中一个上面没有consumer,但另外两个挂了,消息会转到这个上面来,堆积起来。看样子activemq还在升级中。 activemq工作模型比较简单。只有两种模式 queue,topics 。 queue就多对一,producer往queue里发送消息,消费者从queue里取,消费一条,就从queue里移除一条

RabbitMQ实战(三)-高级特性

旧城冷巷雨未停 提交于 2019-11-30 21:16:06
0 相关源码 1 你将学到 如何保证消息百分百投递成功 幂等性 如何避免海量订单生成时消息的重复消费 Confirm确认消息、Return返回消息 自定义消费者 消息的ACK与重回队列 限流 TTL 死信队列 2 保证消息的百分百投递成功 2.1 Producer 的可靠性投递 2.1.1 要求 保证消息的成功发出 保证MQ节点的成功接收 发送端收到MQ节点(Broker) 确认应答 完善的消息补偿机制 在实际生产中,很难保障前三点的完全可靠,比如在极端的环境中,生产者发送消息失败了,发送端在接受确认应答时突然发生网络闪断等等情况,很难保障可靠性投递,所以就需要有第四点完善的消息补偿机制。 2.1.2 解决方案 2.1.2.1 方案一:消息信息落库,对消息状态进行打标(常见方案) 将消息持久化到DB并设置状态值,收到Consumer的应答就改变当前记录的状态. 再轮询重新发送没接收到应答的消息,注意这里要设置重试次数. 方案流程图 方案实现流程 比如我下单成功 step1 - 对订单数据入BIZ DB订单库,并对因此生成的业务消息入MSG DB消息库 此处由于采用了两个数据库,需要两次持久化操作,为了保证数据的一致性,有人可能就想着采用分布式事务,但在大厂实践中,基本都是采用补偿机制! 这里一定要保证step1 中消息都存储成功了,没有出现任何异常情况,然后生产端再进行消息发送

(转)RabbitMQ基础概念详细介绍

这一生的挚爱 提交于 2019-11-30 21:14:46
写得太好,转一发 转至: http://www.ostest.cn/archives/497 引言 你是否遇到过两个(多个)系统间需要通过定时任务来同步某些数据?你是否在为异构系统的不同进程间相互调用、通讯的问题而苦恼、挣扎?如果是,那么恭喜你,消息服务让你可以很轻松地解决这些问题。 消息服务擅长于解决多系统、异构系统间的数据交换(消息通知/通讯)问题,你也可以把它用于系统间服务的相互调用(RPC)。本文将要介绍的RabbitMQ就是当前最主流的消息中间件之一。 RabbitMQ简介 AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。 AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。 RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如: Python 、Ruby、.NET、 Java 、JMS、C、 PHP 、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。 下面将重点介绍RabbitMQ中的一些基础概念,了解了这些概念

SpringBoot整合RabbitMQ之发送接收消息实战

﹥>﹥吖頭↗ 提交于 2019-11-30 21:14:32
实战前言 前几篇文章中,我们介绍了SpringBoot整合RabbitMQ的配置以及实战了Spring的事件驱动模型,这两篇文章对于我们后续实战RabbitMQ其他知识要点将起到奠基的作用的。特别是Spring的事件驱动模型,当我们全篇实战完毕RabbitMQ并大概了解一下RabbitMQ相关组件的源码时,会发现其中的ApplicationEvent、ApplicationListener、ApplicationEventPublisher跟RabbitMQ的Message、Listener、RabbitTemplate有“异曲同工之妙”,当然啦,其中更多有关联关系的是它们的底层源码,感兴趣的童鞋可以研究一番! 实战概要 从本篇文章将开始采用SpringBoot整合RabbitMQ的方式来实战相关知识要点、企业级应用业务模块以及微服务项目一些典型的问题。 本篇文章将介绍实战RabbitMQ在SpringBoot项目中的基本应用,即如何创建队列、交换机、路由及其绑定以及如何发送接收消息! 实战历程 前几篇文章我们已经实现了如何采用IDEA开发工具实现SpringBoot整合RabbitMQ的配置,其中有一个相当重要的配置类 RabbitmqConfig.java ,我们将在这里创建队列、交换机、路由及其绑定,下面我们就创建一个简单的消息模型吧:DirectExchange

RabbitMQ教程

耗尽温柔 提交于 2019-11-30 21:13:29
如果此教程对您有帮助,就请有钱的捧个钱场,没钱的捧个人场(转载分享)哦~ 推荐springCloud教程: https://blog.csdn.net/hellozpc/article/details/83692496 推荐Springboot2.0教程: https://blog.csdn.net/hellozpc/article/details/82531834 文章目录 RabbitMQ实战教程 1.什么是MQ 2.RabbitMQ 2.1.RabbitMQ的简介 2.2.官网 2.3.MQ的其他产品 2.4.学习5种队列 2.5.安装文档 3.搭建RabbitMQ环境 3.1.下载 3.2.windows下安装 3.3.Linux下安装 3.4.安装的注意事项 3.5.安装完成后操作 4.添加用户 4.1.添加admin用户 4.2.用户角色 4.3.创建Virtual Hosts 4.4.管理界面中的功能 5.学习五种队列 5.1.导入my-rabbitmq项目 5.2.简单队列 5.3.Work模式 5.4.Work模式的“能者多劳” 5.5.消息的确认模式 5.6.订阅模式 5.7.路由模式 5.8.主题模式(通配符模式) 6.Spring-Rabbit 6.1.Spring项目 6.2.简介 6.3.使用 6.4.持久化交换机和队列 7

rabbitmq消息中间件的案例

China☆狼群 提交于 2019-11-30 21:12:12
GitHub地址: https://github.com/hsowan/rabbitmq-demo This demo will involve RabbitMQ and SpringAMQP. Application SecKill simulation Reliable delivery SecKill Now, there is only one goods which is MacBook Pro and one hundred users want to get it, ok, the only one MacBook Pro will be free after n minutes and all users can SecKill it. Let`s realize it. Using ThreadPoolExecutor to fake 100 users /** * int corePoolSize, * int maximumPoolSize, * long keepAliveTime, * java.util.concurrent.TimeUnit unit, * java.util.concurrent.BlockingQueue<Runnable> workQueue */ private ThreadPoolExecutor

RabbitMQ进阶

你离开我真会死。 提交于 2019-11-30 21:05:40
1、RabbitMQ消息何去何从 channel.basicPublish方法两个参数,mandatory和immediate,他们都有当消息传递过程不可达到目的地时会将消息返回给生产者的功能 mandatory参数 当mandatory参数设为true时,交换器无法根据自身的类型和路由键找到一个符合条件的队列,那么RabbitMQ会调用Basic.Return命令将消息返回给生产者。当mandatory参数设置为false时,出现上述情形,则消息直接被丢弃。RabbitMQ提供的备份交换器(Alternate Exchange)可以将未能被交换器路由的消息(没有绑定队列或没有匹配的绑定)存储起来,不返回给客户端 使用mandatory参数的关键代码 channel . basicPublish ( EXCHANGE_NAME , "" , true , MessageProperties . PERSISTENT_TEXT_PLAIN , "mandatory test" . getBytes ( ) ) ; channel . addReturnListener ( new ReturnListener ( ) { public void handleReturn ( int replyCode , String replyText , String exchange ,