RabbIT

SpringBoot消息队列之-rabbitMQ

本秂侑毒 提交于 2020-04-26 19:05:22
一、概述 1.在大多应用中,我们系统之间需要进行异步通信,即异步消息。 2.异步消息中两个重要概念: 消息代理(message broker)和目的地(destination) 当消息发送者发送消息以后,将由消息代理接管,消息代理保证消息传递到指定目的地。 3.异步消息主要有两种形式的目的地 队列(queue):点对点消息通信(point-to-point) 主题(topic):发布(publish)/订阅(subscribe)消息通信 4.点对点式: –消息发送者发送消息,消息代理将其放入一个队列中,消息接收者从队列中获取消息内容,消息读取后被移出队列 –消息只有唯一的发送者和接受者,但并不是说只能有一个接收者 5.发布订阅式: –发送者(发布者)发送消息到主题,多个接收者(订阅者)监听(订阅)这个主题,那么就会在消息到达时同时收到消息 二、AMQP(Advanced Message Queuing Protocol) –高级消息队列协议,也是一个消息代理的规范,兼容JMS –RabbitMQ是AMQP的实现 核心概念: Producer&Consumer –producer指的是消息生产者,consumer消息的消费者。 Broker –它提供一种传输服务,它的角色就是维护一条从生产者到消费者的路线,保证数据能按照指定的方式进行传输 Queue –消息队列

消息队列探秘 – RabbitMQ 消息队列工作原理

こ雲淡風輕ζ 提交于 2020-04-26 17:41:24
1. 历史 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现。AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有很多公开标准(如 COBAR的 IIOP ,或者是 SOAP 等),但是在异步消息处理中却不是这样,只有大企业有一些商业实现(如微软的 MSMQ ,IBM 的 Websphere MQ 等),因此,在 2006 年的 6 月,Cisco 、Redhat、iMatix 等联合制定了 AMQP 的公开标准。 RabbitMQ是由RabbitMQ Technologies Ltd开发并且提供商业支持的。该公司在2010年4月被SpringSource(VMWare的一个部门)收购。在2013年5月被并入Pivotal。其实VMWare,Pivotal和EMC本质上是一家的。不同的是VMWare是独立上市子公司,而Pivotal是整合了EMC的某些资源,现在并没有上市。 RabbitMQ的官网是http://www.rabbitmq.com 2. 应用场景 言归正传。RabbitMQ,或者说AMQP解决了什么问题,或者说它的应用场景是什么? 对于一个大型的软件系统来说,它会有很多的组件或者说模块或者说子系统或者(subsystem or Component or submodule)

RabbitMQ TroubleShooting

◇◆丶佛笑我妖孽 提交于 2020-04-22 04:25:04
RabbitMQ是一款优秀的消息队列中间件,提供了稳定、监控完善的产品,但是软件就会有bug。为了前进路径可以畅通,我们必须了解出现的一些故障的快速处理方式,毕竟在生产环境,时间就是生命,尽快的处理是避免产生事故的最有效方式。 了解常见的一些故障,我们可以有针对的处理预案,快速、高效的处理故障,更好的运维是我们一直的追求。 查看故障信息,RabbitMQ出现故障,要通过一些有效途径快速的获取故障原因,而不能是每次都通过重启RabbitMQ服务的方式来解决。 如何查看故障信息,从几个方面 通过rabbitmqctl status ,在出现故障 服务器,查看当前MQ运行状态,该命令可以看到一些非常有用的信息 通过rabbitmqctl cluster_status ,查看集群状态是否正常。在RabbitMQ集群由于网络原因而可能出现网络割裂的情况下,可以通过该命令查看集群运行状态 查看rabbitmq 运行日志文件。可能有的小伙伴不知道该文件在哪里,在RABBITMQ_LOG_BASE定义的位置,还有小伙伴可能又要问RABBITMQ_LOG_BASE是什么,我只能说这个是rabbitmq的环境变量值,在rabbitMQ安装路径/sbin 目录下,注意看有一个rabbitmq-env.bat 文件。请通过记事本打开该文件,然后搜索RABBITMQ_LOG_BASE,可以看到具体路径

RabbitMQ精讲9:镜像模式集群搭建,整合KeepAlived+HaProxy组件

爱⌒轻易说出口 提交于 2020-04-21 04:16:48
目录 1. 镜像模式集群搭建 1.1 集群节点安装 1、安装依赖包 2、下载安装包 3、安装服务命令 4、修改集群用户与连接心跳检测 5、安装管理插件 6、服务指令 1.2 文件同步步骤 1.3 组成集群步骤 1、停止MQ服务 2、组成集群操作 3、slave加入集群操作(重新加入集群也是如此,以最开始的主节点为加入节点) 4、修改集群名称 5、查看集群状态 6、管控台界面 1.4 配置镜像队列 1.5 安装Ha-Proxy 1、Haproxy简介 HAProxy如何实现性能最大化 2、Haproxy安装 3、Haproxy配置 4、启动haproxy 5、访问haproxy 6、关闭haproxy 1.6 安装KeepAlived 1、Keepalived简介 Keepalived特性 Keepalived高可用原理 2、Keepalived安装 3、Keepalived配置 79节点(Master)配置如下 80节点(backup)配置如下 4、执行脚本编写 5、执行脚本赋权 6、启动keepalived 7、高可用测试 1.7 集群配置文件 环境变量配置文件:rabbitmq-env.conf 配置信息配置文件:rabbitmq.config 2. RabbitMQ集群恢复与故障转移 场景一:A先停, B后停 场景二:A, B同时停机 场景三:A先停, B后停, 且A无法恢复

Java 数据持久化系列之 HikariCP (一)

白昼怎懂夜的黑 提交于 2020-04-15 11:57:12
【推荐阅读】微服务还能火多久?>>> 在上一篇 《Java 数据持久化系列之池化技术》 中,我们了解了池化技术,并使用 Apache-common-Pool2 实现了一个简单连接池,实验对比了它和 HikariCP、Druid 等数据库连接池的性能数据。在性能方面,HikariCP遥遥领先,而且它还是 Spring Boot 2.0 默认的数据库连接池。下面我们就来了解一下这款明星级开源数据库连接池的实现。 本文的主要内容包括: HikariCP 简介,介绍它的特性和现况。 HikariCP 的配置项详解,分析部分配置的影响。 HikariCP 为什么这么快,介绍其优化点。 这里啰嗦两句,由于本系列会涉及很多开源项目,比如说 HikariCP、Druid、Mybatis等,所以简单聊一下我对学习开源项目的认识,这也是我自己行文或者组织系列文章顺序的思路,后续有时间再详细总结一下。 安装并检查提供的所有工具,比如 Redis 目录下的 redis-check-aof 等工具的作用,这些工具都是官方特意提供的,一般都是日常经常要使用的,了解其功能。 运行,学习所有配置项的功能,原理和优缺点,比如 Redis 的内存溢出控制策略 maxmemory-policy 的可选值都有哪些,分别对应的策略是什么含义,适用于哪些场景等。 原理研究,针对关键特性进行研究,比如 Netty 的异步

RabbitMQ 如何实现对同一个应用的多个节点进行广播

江枫思渺然 提交于 2020-04-12 19:17:40
1.背景 了解过RabbitMQ的Fanout模式,应该知道它原本的Fanout模式就是用来做广播的。但是它的广播有一点区别,来回顾下它的含义:Fanout类型没有路由键的概念,只要队列绑定到了改exchange上面,就会接收到所有的消息。 使用过程一般就是先new 出一个Fanout类型的交换机,然后往这个交换机上绑定多个队列queue,不同的消费者各自监听不同的队列,这就实现了广播效果,因为同一个消息,会分发到所有队列中。 举个例子: 应用A监听了队列A,应用B监听了队列B,Fanout类型交换机同时绑定了队列A和B.假设生产者端发送了一条消息到Fanout类型交换机,交换机就会把消息分发到所有队列,这时应用A和应用B会收到同一条消息,这就是广播。 说了上面一大堆,只是为了强调,对于RabbitMQ的原本Fanout模式,它的设计就是多个消费者必须监听不同的队列,多个消费者之间才会形成广播关系。 那么问题来了,假如在Fanout工作模式下,多个消费者同时监听的是同一个队列,会怎样?实践过的同学应该都知道,这种情况下,这些消费者会形成竞争关系,现象是同一个消息只会被其中一个消费者接收,达不到广播的效果。。 2.需求 假如现在有一个需求,要做到对同一个应用的多个节点进行广播,怎么实现? 注意,这里所说的同一个应用多个节点,通俗点理解就是一个war包,布在多个服务器节点上。

C#队列学习笔记:RabbitMQ基础知识

荒凉一梦 提交于 2020-04-12 09:02:53
原文: C#队列学习笔记:RabbitMQ基础知识 一、引言 RabbitMQ是Rabbit Message Queue的简写,但不能仅仅理解其为消息队列,消息代理更合适。RabbitMQ是一个由 Erlang 语言开发的AMQP(高级消息队列协议)的开源实现,其内部结构如下: RabbitMQ作为一个消息代理,主要和 消息 打交道,负责接收并转发消息。RabbitMQ提供了可靠的消息机制、跟踪机制和灵活的消息路由,支持消息集群和分布式部署。适用于排队算法、秒杀活动、消息分发、异步处理、数据同步、处理耗时任务、CQRS等应用场景。 二、基础概念 讲解基础概念之前,先来构造一个整体结构图,以方便我们更好地去理解RabbitMQ的基本原理。 通过上面这张结构图,能够清晰地了解到Send Message到Receive Message的一个大致流程。 2.1、Queue Queue(队列)在RabbitMQ中的作用是存储消息,队列的特性是先进先出。上图可以清晰地看到Client A和Client B是生产者,生产者生产消息最终被送到RabbitMQ的内部对象Queue中去,而消费者则是从Queue中取出数据,可以简化表示为: 生产者Send Message,“A”被传送到Queue中,消费者发现消息队列Queue中有订阅的消息,就会将这条消息A读取出来进行一系列的业务操作

多线程基础篇(一)

一曲冷凌霜 提交于 2020-04-12 07:12:58
线程之间方法区和堆内存共享,栈内存不共享;哪个线程调用sleep()方法,哪个线程就进入睡眠状态,与哪个对象调用该方法无关.start()方法的作用是创建一个线程的栈内存,该方法与普通方法相同,执行完立刻销毁. package test1; public class RacerRunnable implements Runnable{ /** * 龟兔赛跑多线程 */ public String winner; public void run() { for(int step = 1; step <= 100; step++) { if(Thread.currentThread().getName().equals("rabbit") && step % 10 == 0) try { Thread.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } if(gameOver(step)==true) { break; } System.out.println(Thread.currentThread().getName()+"-->"+step ); } } public boolean gameOver(int step) { if(winner != null) { return true;

【Spring Boot】19.集成消息

删除回忆录丶 提交于 2020-04-06 22:38:12
消息服务简介 大多应用中,可通过消息服务中间件来提升系统异步通信、扩展解耦能力 具体而言,主要的应用模式有: 异步处理 应用解耦 流量削峰(例如:京东秒杀) 消息服务中两个重要概念 消息代理(message broker) 目的地(destination) 当消息发送者发送消息以后,将由消息代理接管,消息代理保证消息传递到指定目的地。 消息通信机制 消息队列主要有两种形式的目的地 队列(queue):点对点消息通信(point-to-point) 主题(topic):发布(publish)/订阅(subscribe)消息通信 (1)点对点式 消息发送者发送消息,消息代理将其放入一个队列中,消息接收者从队列中获取消息内容,消息读取后被移出队列。也就是说,消息一旦被消费,那么立马删除。 消息只有唯一的发送者和接受者,但并不是说只能有一个接收者 (2)发布订阅式 发送者(发布者)发送消息到主题,多个接收者(订阅者)监听(订阅)这个主题,那么就会在消息到达时同时收到消息。 消息服务规范 JMS(Java Message Service)JAVA消息服务: 基于JVM消息代理的规范。ActiveMQ、HornetMQ是JMS实现 AMQP(Advanced Message Queuing Protocol) 高级消息队列协议,也是一个消息代理的规范,兼容JMS

RabbitMQ 消息中间件搭建详解

孤人 提交于 2020-04-06 18:44:46
1.RabbitMQ简介 消息中间件也可以称消息队列,是指用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息队列模型,可以在分布式环境下扩展进程的通信。 RabbitMQ是使用Erlang语言开发的开源消息队列系统, 基于AMQP协议来实现。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。AMQP协议更多用在企业系统内对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次。 Erlang是一种通用的面向并发的编程语言 特点 可靠性 扩展性 高可用性 多种协议 多语言客户端 管理界面 插件机制 2.集群部署 1.环境部署及软件安装 准备三台虚拟机 192.168.13.139 rabbitmq-1 192.168.13.142 rabbitmq-2 192.168.13.143 rabbitmq-3 配置hosts文件更改三台MQ节点的计算机名分别为rabbitmq-1、rabbitmq-2 和rabbitmq-3,然后修改hosts配置件,并关闭防火墙和selinux 192.168.13.139 [root@rabbitmq-1 ~]# hostnamectl set-hostname rabbitmq-1 [root@rabbitmq-1 ~]# vim /etc