RabbitMQ

RabbitMQ

最后都变了- 提交于 2020-01-15 05:52:49
1、RabbitMQ 简介   MQ全称为Message Queue, 消息队列 (MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。 MQ是消费-生产者模型的一个典型的代表,一端往 消息队列 中不断写入消息,而另一端则可以读取或者订阅队列中的消息。   RabbitMQ 是一个消息代理。主要的原理就是通过接受和转发消息。RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,消息中间件主要用于组件之间的解耦。   RabbitMQ服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。 2、使用场景 例如:应用程序A向应用程序B发送请求并期望得到响应 。 发送方 (应用程序A)向 消息中间件 (RabbitMQ) 发送请求, 接受方 (应用程序B)订阅请求。发送方将消息发送给消息中间件后,异步执行程序。 发送方 (应用程序B) 向 消息中间件 (RabbitMQ) 发送请求 , 接受方 (应用程序A)订阅请求。发送方将消息发送给消息中间件后,异步执行程序。 在项目中,将一些无需即时返回且耗时的操作提取出来,进行了 异步处理 ,而这种异步处理的方式大大的节省了服务器的

SpringBoot使用消息队列RabbitMQ

末鹿安然 提交于 2020-01-15 05:51:44
RabbitMQ 即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲、消息分发的作用。RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,AMQP,即Advanced Message Queuing Protocol, 高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。在项目中,将一些无需即时返回且耗时的操作提取出来,进行了 异步处理 ,而这种异步处理的方式大大的节省了服务器的请求响应时间, 提高了系统的吞吐量。 简单概念 几个名词术语:           Broker - 简单来说就是消息队列服务器的实体。       Exchange - 消息路由器 ,转发消息到绑定的队列上,指定消息按什么规则,路由到哪个队列。       Queue - 消息队列 ,用来存储消息,每个消息都会被投入到一个或多个队列。       Binding - 绑定 ,它的作用就是把 Exchange 和 Queue 按照路由规则绑定起来。       RoutingKey - 路由关键字 ,Exchange 根据这个关键字进行消息投递。       Producter - 消息生产者 ,产生消息的程序。       Consumer - 消息消费者 ,接收消息的程序。       Channel - 消息通道

Spring Boot中使用RabbitMQ

折月煮酒 提交于 2020-01-15 05:50:36
很久没有写Spring Boot的内容了,正好最近在写Spring Cloud Bus的内容,因为内容会有一些相关性,所以先补一篇关于AMQP的整合。 Message Broker与AMQP简介 Message Broker是一种消息验证、传输、路由的架构模式,其设计目标主要应用于下面这些场景: 消息路由到一个或多个目的地 消息转化为其他的表现方式 执行消息的聚集、消息的分解,并将结果发送到他们的目的地,然后重新组合相应返回给消息用户 调用Web服务来检索数据 响应事件或错误 使用发布-订阅模式来提供内容或基于主题的消息路由 AMQP是Advanced Message Queuing Protocol的简称,它是一个面向消息中间件的开放式标准应用层协议。AMQP定义了这些特性: 消息方向 消息队列 消息路由(包括:点到点和发布-订阅模式) 可靠性 安全性 RabbitMQ 本文要介绍的RabbitMQ就是以AMQP协议实现的一种中间件产品,它可以支持多种操作系统,多种编程语言,几乎可以覆盖所有主流的企业级技术平台。 安装 详情见《 安装RabbitMQ 》 Rabbit管理 我们可以直接通过配置文件的访问进行管理,也可以通过Web的访问进行管理。下面我们将介绍如何通过Web进行管理。 执行 rabbitmq-plugins.bat enable rabbitmq

学习openstack(八)

心不动则不痛 提交于 2020-01-15 03:48:36
一、OpenStack初探 1.1 OpenStack简介  OpenStack是一整套开源软件项目的综合,它允许企业或服务提供者建立、运行自己的云计算和存储设施。Rackspace与NASA是最初重要的两个贡献者,前者提供了“云文件”平台代码,该平台增强了OpenStack对象存储部分的功能,而后者带来了“Nebula”平台形成了OpenStack其余的部分。而今,OpenStack基金会已经有150多个会员,包括很多知名公司如“Canonical、DELL、Citrix”等。 1.2 OpenStack的几大组件 1.2.1 图解各大组件之间关系 <img src="http://cdn.oldboyedu.com/wp-content/uploads/2016/02/wpid-631325ba70ea05d245906c576f3ef421_d1e1d1377e8365faa73252adddf150d2.png" alt="" title=""></p> 1.2.2 谈谈openstack的组件 OpenStack 认证(keystone)   Keystone为所有的OpenStack组件提供认证和访问策略服务,它依赖自身REST(基于Identity API)系统进行工作,主要对(但不限于)Swift、Glance、Nova等进行认证与授权。事实上

linux中搭建

自作多情 提交于 2020-01-14 18:27:28
目录 一、安装mysql 二、安装redis 1. 搭建主从复制 2. 查看 三、配置别名 临时生效 永久生效 四、搭建maven 五、安装jdk 六、安装rabbitmq 七、安装tomcat 八、安装zookeeper 搭建集群 九、安装docker docker基本体验 监控 十、安装git服务 一、安装mysql 删除之前的mysql 查看 rpm -qa|grep -i mysql 全部删除 查看 find / -name mysql 全部删除 [root@localhost bin]# vi /etc/my.cnf [mysqld] datadir=/usr/local/mysql/data port = 3306 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES symbolic-links=0 max_connections=400 innodb_file_per_table=1 #表名大小写不明感,敏感为 lower_case_table_names=1 授权 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION; 启动 /usr/local/mysql/support-files/mysql

rabbitmq安装 Windows10

放肆的年华 提交于 2020-01-14 17:30:01
到今天我依旧不能忘记那天让rabbitmq支配的我,到头来还是坑了自己 为什么这样说呢?因为通过这次rabbitmq的安装,我充分了解到: 英语好是很重要的一件事情,特别当你神志不清时,着急只会让你更加着急,而不能对你有丝毫的帮助 讲了一堆废话0o 0下面讲一下我悲惨的安装历程,希望能够给大家提供一点帮助 当我了解到我要学习一些不一样的东西时,我是很开心的,只能说人类果然还是对未来看的太美好啊! 假如你不是第一次安装rabbitmq 这不是你的第一次安装,所以在你安装新的rabbitmq请确保erlang文件和rabbitmq文件已经完全删除 删除erl文件时有empd.exe文件运行导致不能不删除,请在任务管理器中找到该进程并停止运行后删除 当然你也可能会找不到这个进程,那么就请重启然后就能删除erlang文件了 通过regedit打开注册表 找到HKEY_LOCAL_MACHINE\SOFTWARE\Ericsson\Erlang\ErlSrv 把其下所有项删除 检查端口是否被占用 netstat -ano 查看所有打开的端口 netstat -aon|findstr "4369" 检查4369端口情况 tasklist|findstr "13876" 返回对应pid进程 环境配置,erlang 本人参照教程http://www.cnblogs.com/ericli

What happens to fetched messages when RabbitMQ consumer crashes?

谁都会走 提交于 2020-01-14 09:53:06
问题 If I have a RabbitMQ consumer that retrieves 100 messages in bulk, but then it crashes before it can mark those messages as processed, are those messages lost? I want every message in the queue to be processed at least once. What's the recommended approach to deal with consumers that crash before they've acknowledged messages? Does RabbitMQ put them back on the queue somehow, or what do I need to do to make it happen? 回答1: What's the recommended approach to deal with consumers that crash

How to pause and resume consumption gracefully in rabbitmq, pika python

最后都变了- 提交于 2020-01-14 08:52:51
问题 I'm using basic_consume() for receiving messages and basic_cancel for canceling consuming, but there is a problem. Here is the code of pika.channel def basic_consume(self, consumer_callback, queue='', no_ack=False, exclusive=False, consumer_tag=None): """Sends the AMQP command Basic.Consume to the broker and binds messages for the consumer_tag to the consumer callback. If you do not pass in a consumer_tag, one will be automatically generated for you. Returns the consumer tag. For more

分布式事务,EventBus 解决方案:CAP【中文文档】

可紊 提交于 2020-01-14 03:00:47
原文: 分布式事务,EventBus 解决方案:CAP【中文文档】 最新文档地址: https://github.com/dotnetcore/CAP/wiki 前言 很多同学想对CAP的机制以及用法等想有一个详细的了解,所以花了将近两周时间写了这份中文的CAP文档,对 CAP 还不知道的同学可以先看一下 这篇文章 。 本文档为 CAP 文献(Wiki),本文献同时提供中文和英文版本,英文版本目前还在翻译中,会放到Github Wiki 中。 目录 前言 1、Getting Started 1.1 介绍 1.2 应用场景 1.3 Quick Start 2、API接口 2.1 发布/发送 2.1.1 事务 2.2 订阅/消费 2.2.1 例外情况 3、配置 3.1 Cap Options 3.2 RabbitMQ Options 3.3 Kafka Options 3.4 SqlServer Options 3.5 MySql Options 4、设计原理 4.1 动机 4.2 持久化 4.3 通讯数据流 4.4 一致性 5、实现 5.1 消息表 5.2 消息格式 5.3 EventBus 5.4 重试 6、分布式事务 6.1 异步确保 7、FAQ 1、Getting Started 1.1 介绍 CAP 是一个遵循 .NET Standard 标准库的C#库

RabbitMQ(二)

此生再无相见时 提交于 2020-01-14 02:42:24
(1) MQ的概念 Message Queue :消息队列,存放消息的一个容器(先进先出) (2)MQ的优点 解耦 、 异步提速 、 削峰填谷 (3)MQ的缺点 可用性减弱 、复杂性提供、处理一致性 MQ是需要成本的,适合的地方使用。 (4)MQ的实现 RabbitMQ(erlang AMQP协议) ActiveMQ(java JMS接口规范) RocketMQ(java) Kafka(大数据) (5)MQ的工作模式 简单模式、工作队列模式、发布订阅模式、路由模式、通配符模式 (6)编写代码 JAVA ConnectionFactory host / port / username/ password/ virtualHost Connection Channel Channel.exchangeDeclare(exchangeName,exchangeType[fanout\direct\topic]) Channel.queueDeclare(queueName,true,false,false,null); Channel.queueBind(queue,exchange,routingKey); Channel.basicPublish(exchange,routingKey,null,body); Consumer consumer = new