mq

AMQP-RabbitMQ/3/发布订阅模式

不羁岁月 提交于 2019-11-30 22:26:18
3. 发布订阅模式 Publish/Subscribe - 全集监听 fanout 一次向多个消费者发送消息 图示 # 个人理解 生产者定义Exchange,同时将Exchange的类型定义为 fanout ,并向该Exchange发送消息。 消费者定义队列Queue,并将队列与该交换机进行绑定。之后交换机付负责将消息 全量推送 给每一个与之绑定的Queue RabbitMQ中消息传递模型的核心思想是生产者永远不会将任何消息直接发送到队列。实际上,生产者通常甚至不知道消息是否会被传递到任何队列。 相反,生产者只能向Exchange发送消息。Exchange所做的工作非常简单。一方面,它接收来自生产者的消息,另一方面将它们推送到队列。Exchange必须确切知道如何处理它收到的消息。它应该附加到特定队列吗?它应该附加到多个队列吗?或者它应该被丢弃。其规则由交换类型定义 。 有几种交换类型可供选择: direct , topic , headers and fanout fanout: 将它接收到的消息广播到所有绑定到它的消息队列上。(忽略路由键routingKey) 生产者 - 发布者 package com . futao . springmvcdemo . mq . rabbit . ps ; import com . futao . springmvcdemo . mq .

商城-RabbitMQ及消息同步-RabbitMQ

不想你离开。 提交于 2019-11-30 22:11:10
商城-RabbitMQ及消息同步-RabbitMQ 1.RabbitMQ 1.1.搜索与商品服务的问题 1.2.消息队列(MQ) 1.2.1.什么是消息队列 1.2.2.AMQP和JMS 1.2.3.常见MQ产品 1.2.4.RabbitMQ 1.3.下载和安装 1.3.1.下载 1.3.2.安装 1.RabbitMQ 1.1.搜索与商品服务的问题 目前我们已经完成了商品详情和搜索系统的开发。我们思考一下,是否存在问题? 商品的原始数据保存在数据库中,增删改查都在数据库中完成。 搜索服务数据来源是索引库,如果数据库商品发生变化,索引库数据不能及时更新。 商品详情做了页面静态化,静态页面数据也不会随着数据库商品发生变化。 如果我们在后台修改了商品的价格,搜索页面和商品详情页显示的依然是旧的价格,这样显然不对。该如何解决? 这里有两种解决方案: 方案1:每当后台对商品做增删改操作,同时要修改索引库数据及静态页面 方案2:搜索服务和商品页面服务对外提供操作接口,后台在商品增删改后,调用接口 以上两种方式都有同一个严重问题:就是代码耦合,后台服务中需要嵌入搜索和商品页面服务,违背了微服务的 独立 原则。 所以,我们会通过另外一种方式来解决这个问题:消息队列 1.2.消息队列(MQ) 1.2.1.什么是消息队列 消息队列,即MQ,Message Queue。 消息队列是典型的:生产者

Spring-RabbitMQ Consumer踩坑经历

余生长醉 提交于 2019-11-30 22:05:49
Spring-RabbitMQ Consumer踩坑经历 问题1: Consumer假死,无真正的消费能力 背景 spring-rabbit 版本变更至 1.6.2.RELEASE 现象 consumer数量正常,mq控制面板的 prefetch 参数始终是1, 消息无法正常ack, 队列处于假死状态 系统报异常org.springframework.amqp.rabbit.listener.exception.ListenerExecutionFailedException [2018-09-09 10:31:27.27]RuntimeException-org.springframework.amqp.rabbit.listener.exception.ListenerExecutionFailedException [ ERROR] [ E log ] Execution of Rabbit message listener failed. org.springframework.amqp.rabbit.listener.exception.ListenerExecutionFailedException: Listener threw exception at org.springframework.amqp.rabbit.listener

RabbitMQ 与SpringMvc的配置使用

≯℡__Kan透↙ 提交于 2019-11-30 22:01:42
在MQ消息服务框架方面, Spring官方提供了RabbitMQ的使用案例, 采用的是SpringBoot的方式( messaging-rabbitmq ); 接下来, 我们采用Xml配置的方式结合RabbitMQ到SpringMvc里面玩玩! 环境: Win10+Jdk1.8+Spring4.3+RabbitMQ3.6.5 1 . 本地先安装RabbitMQ服务 请参考这里 URL ,下载合适自己的安装包并进行安装!因为Rabbit是基于Erlang平台运行的, 借用了它的并发性, 分布式等特性, 所以安装Erlang环境可以看 URL ! 为了后续方便, 可以在安装完RabbitMQ后配置下它的环境变量! 2 . 看下RabbitMQ的运行状态, 有需要的话可以再添加一下自己服务的配置, 在命令行执行以下命令 1> 查询RabbitMQ的状态 rabbitmqctl status 2> 查询系统用户列表, “guest” 默认密码也是”guest”, 它的角色是”administrator”, 系统最高权限者, 可以登陆后台管理系统, 查看系统的所有状态信息及相关增删操作! rabbitmqctl list_users 3> 先执行下面的命令启用后台管理功能, 然后访问 “ http://127.0.0.1:15672/ “, 再使用超级管理员guest进行登陆查看并操作!

SpringBoot对消息队列(MQ)的支持

人走茶凉 提交于 2019-11-30 21:51:18
1.异步消息的定义   异步消息的主要目的是为了系统与系统之间的通信,所谓异步消息即消息发送者无需等待消息接收者的处理以及返回,甚至无需关心消息是否发送成功   在异步消息中有两个很重要的概念,即消息代理和目的地,当消息发送者发送消息之后,消息将由消息代理接管,消息代理保证消息传递到指定目的地。   异步消息主要有两种目的地形式,队列(queue)和主题(topic),队列用于点对点形式的消息通信,主题用于发布订阅式的消息通信。 1.1目的地形式分类 1.1.1点对点式   当消息发送者发送消息,消息代理将消息后将消息放进一个队列里,当有消息接收者来接收消息的时候,消息将从队列中取出传递给消息接收者,这时候队列里就没有了这条消息。点对点式确保每一条消息只有唯一的发送者和接收者,但这并不能说明只有一个接收者能够从队列中接收消息,因为队列中有多个消息,点对点式只保证每一条消息只有唯一的发送者和接收者 1.1.2发布/订阅式   发布订阅式是消息发送者发送消息到主题,而多个消息接收者监听这个主题,此时的消息发送者和接收者分别叫做发布者和订阅者 1.2 企业级消息代理   JMS即JAVA消息服务,是基于JVM的消息代理规范,ActiveMQ是一个JMS的实现 AMQP也是一个消息代理的规范,他不仅兼容JMS,还支持跨语言和平台,AMQP的主要实现是RabbitMQ 1.3

SpringCloud----RabbitMQ 实战(二)--Rabbit 交换器讲解

≡放荡痞女 提交于 2019-11-30 21:41:41
七、 Rabbit 交换器讲解 1 Direct 交换器(发布与订阅 完全匹配) 1.1需求 1.2搭建环境 1.2.1创建项目 1.2.2修改全局配置文件 修改 Consumer 的配置文件 spring.application.name=springcloud-mq spring.rabbitmq.host=192.168.70.131 spring.rabbitmq.port=5672 spring.rabbitmq.username=oldlu spring.rabbitmq.password=123456 #设置交换器的名称 mq.config.exchange=log.direct #info 队列名称 mq.config.queue.info=log.info #info 路由键 mq.config.queue.info.routing.key=log.info.routing.key #error 队列名称 mq.config.queue.error=log.error #error 路由键 mq.config.queue.error.routing.key=log.error.routing.key 修改 Provider 的配置文件 spring.application.name=springcloud-mq spring.rabbitmq.host=192

rabbitmq-----发布订阅模式

*爱你&永不变心* 提交于 2019-11-30 21:40:06
上篇我们已经讲过了工作模式和简单模式的用法。而这节我们就要开始讲一下后面三种的第一种,在我们平常开发中,其实用的比较多的是后面的这三种。 发布订阅模式:英文叫Publish/Subscribe,发布订阅模式也称为广播模式,在exchange下属于fanout模式。广播,大家应该都知道吧,在mq中,其实就是一个生产者对应n个消费者,可能仔细的人就会发现我们的工作模式也是一对多的,那么这两者有什么关系呢? 发布订阅模式的结构图: 这个x表示的就是我们之前所说的交换机,他并不是将消息直接发送给队列的,而是通过交换机,然后通过交换机绑定队列,在发送到队列。从这个图就发现了,这个模式和工作模式的区别吧,一个是发到多个消息队列,一个是只发到一个队列,多个消费者去消费的。 可能有人会问这种模式有什么用呢? 举个最简单的列子吧:大家应该知道公众号吧,如果你自己也玩过公众号就会发现,你发送一个东西的时候,所有关注你的人都能收到你的消息,这种如果在mq中的实现其实就可以使用这种模式,生产者其实就可以理解为微信的公众号,然后消费者可以理解为用户,然后关注可以理解为用户绑定的队列。这样你发送东西的时候,你会将数据发送到你粉丝的队列中,然后不同的粉丝通过不同的队列去取数据,这样就能达到公众号的效果。 而在代码中如何去实现这种模式呢?上一节我们是直接使用原生的代码去实现两种工作模式的

消息队列-Rabbitmq处理消息及在Spring中的应用

血红的双手。 提交于 2019-11-30 21:39:46
消息队列-Rabbitmq 1. 什么是消息队列 2. AMQP和JMS 3. 常见MQ产品 4. RabbitMQ 4.1 五种消息模型 4.1.1 基本消息模型 4.1.2 work消息模型 4.1.3 订阅模型分类 4.1.3.1 订阅模型-Fanout 4.1.3.2 订阅模型-Direct 4.1.3.3 订阅模型-Topic 5. 处理消息丢失的几种方法 5.1 消费者的ACK机制 5.2 持久化 5.3 生产者确认机制 6. Spring AMQP 6.1 简介 6.2 依赖和配置 6.3 监听者 6.4 AmqpTemplate 6.5 测试代码 1. 什么是消息队列 消息队列,即MQ,Message Queue。 消息队列是典型的:生产者、消费者模型。生产者不断向消息队列中生产消息,消费者不断的从队列中获取消息。因为消息的生产和消费都是异步的,而且只关心消息的发送和接收,没有业务逻辑的侵入,这样就实现了生产者和消费者的解耦。 消息队列的主要特点是异步处理,主要目的是减少请求响应时间和解耦。 2. AMQP和JMS MQ是消息通信的模型,并发具体实现。现在实现MQ的有两种主流方式:AMQP、JMS。 两者间的区别和联系: JMS是定义了统一的接口,来对消息操作进行统一;AMQP是通过 规定协议 来统一数据交互的格式 JMS限定了必须使用Java语言;AMQP只是协议

RabbitMQ入门 用途说明和深入理解

夙愿已清 提交于 2019-11-30 21:34:33
RabbitMQ 在上一家公司已经接触过了, 但是懵懵懂懂的. 不是很清楚. 具体怎么个逻辑. 这次公司打算搭建新的系统. 领导要求研究一下MQ. 经过研究得出的结论是. MSMQ的设计理念不适合做系统的底层框架. 他不适合做分布式系统. 最主要的是. MSMQ如果没有消费者, 默认消息是一直存在的. 而RabbitMQ的设计理念是.只要有接收消息的队列. 邮件就会存放到队列里. 直到订阅人取走. . 如果没有可以接收这个消息的消息队列. 默认是抛弃这个消息的… 下面就把我的研究结果写一下. ###如何在新的系统中使用RabbitMQ. 系统设计的两个重大问题. 第一条要满足未来的业务需求的不断变化和增加. 也就是可扩展性. 第二条要满足性能的可伸缩性. 也就是可集群性…通过增加机器能处理更多的请求 第三条要解耦合. 如果不解耦合, 未来业务增加或变更的时候你还在修改3年前写的代码.试问你有多大的把握保证升级好系统不出问题? 如何可以写新的代码而不用修改老代码所带来的好处谁都知道… 第四条简单易懂. 以上4条在任何一个系统中都要遵循的原则. 以前是无法做到的. 自从有了MQ以后. 这些都可以同时做到了. 以前的设计理念是把系统看作一个人,按照工作的指令从上到下的执行. 现在要建立的概念是, 把系统的各个功能看作不同的人. 人与人之间的沟通通过消息进行交流传递信息…

windows下安装rabbitmq的步骤详解

别说谁变了你拦得住时间么 提交于 2019-11-30 21:31:36
(仅作为个人的备忘记录) Rabbit MQ 是建立在强大的Erlang OTP平台上,因此安装Rabbit MQ的前提是安装Erlang。通过下面两个连接可以下载安装最新的版本: 下载并安装 Eralng OTP For Windows otp_win64_18.3.exe(erlang的环境) 运行安装 Rabbit MQ Server Windows Installer (v3.6.1) rabbitmq-server-3.6.1.exe 具体的安装以上两个exe文件的步骤可以参考:http://jingyan.baidu.com/article/a17d5285173ce68098c8f2e5.html 安装成功后,可以通过dos命令来查看是否真的安装成功且正常启动,因此cmd后输入以下命令: -- 定位到rabbitmq的安装路径: -- 上述命令回车后接着输入rabbitmqctl status,回车后出现下面一坨的即说明安装没有问题: -- 接下来我们需要安装 RabbitMQWeb的管理插件,接着上面继续输入以下命令(rabbitmq-plugins enable rabbitmq_management),回车后可以到以下输出: -- 此时,已经可以通过 http://127.0.0.1:15672/ 地址来访问web管理界面了,默认的账户和密码均是 guest