amqp

消息队列探秘 – 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消息确认机制之事务机制

点点圈 提交于 2020-04-26 14:18:35
一 问题提出 生产者发送消息出去之后,不知道到底有没有发送到RabbitMQ服务器, 默认是不知道的。而且有的时候我们在发送消息之后,后面的逻辑出问题了,我们不想要发送之前的消息了,需要撤回该怎么办。 二 解决方案 1 AMQP 事务机制 2 Confirm 模式 本次关注事务机制 三 事务机制说明 AMPQ提供了以下几个方法: txSelect 将当前channel设置为transaction模式 txCommit 提交当前事务 txRollback 事务回滚 四 代码——正常情况 1 工具类 /** * Copyright (C), 2020-2020, 软件公司 * FileName: TxSend * Author: cakin * Date: 2020/4/25 * Description: 事务生产者 */ package com.rabbitmq.tx; /** * @ClassName: TxSend * @Description: 事务生产者 * @Date: 2020/4/25 * @Author: cakin */ import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.util.ConnectionUtils; import

微服务之Service Fabric 系列 (一):概览、环境安装

不想你离开。 提交于 2020-04-25 06:35:10
参考   微软官方文档 service fabric   百家号 大话微服务架构之微服务框架微软ServiceFabric正式开源 一、概述   1.概念      Azure Service Fabric 是一款分布式系统平台,可方便用户轻松打包、部署和管理可缩放的可靠微服务和容器。 Service Fabric 还解决了开发和管理云本机应用程序面临的重大难题。 开发人员和管理员不需解决复杂的基础结构问题,只需专注于实现苛刻的任务关键型工作负荷,即那些可缩放、可靠且易于管理的工作负荷。 Service Fabric 代表了下一代平台,用于生成和管理在容器中运行的企业级单层云规模应用程序。   2.微服务     微服务是指用小型服务集合来构建服务端应用的方法,每个服务在独立的进程中运行,服务间通过特定协议(http,AMQP)通信,每个服务能够独立开发、部署,拥有自己的领域数据模型和领域逻辑,可以有不同的数据存储技术甚至是不同的编程语言。     微服务的目的在:解耦。解耦是永恒的主题,依赖注入是为了解耦,应用分层是为了解耦,这些可以看做是纵向解耦,而微服务是把应用横向解耦,服务间解耦。     下图是传统一体式应用开发与微服务开发的对比:                     ① 单一式应用包含域特定的功能,通常按照功能层来划分,例如传统三层。       ②

RabbitMQ系列(二)--基础组件

此生再无相见时 提交于 2020-04-24 15:50:36
声明:对于RabbitMQ的学习基于某课网相关视频和《RabbitMQ实战指南》一书,后续关于RabbitMQ的博客都是基于二者 一、什么是RabbitMQ   RabbitMQ是开源代理和队列服务器,通过普通协议在不同的应用之间共享数据,使用Erlang编写(Erlang进行数据交换的性能很好, 和原生socket 一样好的延迟响应效果),基于AMQP协议 二、AMQP AMQP高级消息队列协议:具有现代特征的二进制协议,和JMS有点像,模型如下: AMQP核心概念   1、Server:Broker,接受client连接,实现AMQP实体服务   2、Connection:应用程序和Broker的网络连接   3、Channel:网络信道,读写都是在Channel中进行(NIO的概念),包括对MQ进行的一些操作(例如clear queue等)都是在Channel中进行, 客户端可建立多个Channel,每个Channel代表一个会话任务   4、Message:由properties(有消息优先级、延迟等特性)和Body(消息内容)组成   5、Virtual host:用于消息隔离(类似Redis 16个db这种概念),最上层的消息路由,一个包含若干Exchange和Queue,同一个里面Exchange 和Queue的名称不能存在相同的。   6、Exchange

RabbitMQ核心组件及应用场景

我是研究僧i 提交于 2020-04-24 14:19:48
一、适用场景 1.解耦 2.最终一致性 3.广播 4.错峰与流控(秒杀业务用于流量削峰场景) 秒杀场景 二、核心组件,关键点(交换器、队列、绑定) AMPQ消息路由必要三部分:交换器、队列、绑定。 Java核心组件:ConnectionFactory、Connection、Channel、Delivery、DeliverCallback、CancelCallback 队列 1. 建立连接 ConnectionFactory factory = new ConnectionFactory(); factory.setHost("127.0.0.1"); factory.setPort(5672); factory.setUsername("admin"); factory.setPassword("admin"); Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); 2. 声明队列 如果在同一条信道上订阅了另一个队列,那就不能再声明队列,必须先取消订阅。 Queue.DeclareOk queueDeclare(String queue, boolean durable, boolean exclusive, boolean autoDelete,

RabbitMq queue异常导致rabbitmq consumer停止消费问题处理

天涯浪子 提交于 2020-04-22 05:57:27
RabbitMq queue异常导致rabbitmq consumer停止消费问题处理 问题 偶发性rabbitmq出问题或者认为操作错误,访问不了queue,导致消费端停止消费 org.springframework.amqp.rabbit.listener.QueuesNotAvailableException: Cannot prepare queue for listener. Either the queue doesn't exist or the broker will not allow us to use it. at org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.start(BlockingQueueConsumer.java:599) at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1424) at java.lang.Thread.run(Thread.java:745) Caused by: org.springframework

ActiveMQ支持的消息协议

狂风中的少年 提交于 2020-04-21 13:14:58
ActiveMQ支持哪些协议 ActiveMQ支持多种协议传输和传输方式,允许客户端使用多种协议连接 ActiveMQ支持的协议:AUTO,OpenWire,AMQP,Stomp,MQTT等 ActiveMQ支持的基础传输方式:VM,TCP,SSL,UDP,Peer,Multicast,HTTP(S)等,以及更高级的Failover,Fanout,Discovery,ZerConf方式 ActiveMQ的协议连接配置 在ActiveMQ安装目录的/conf/activemq.xml文件中,通过配置transportConnectors就可以使用多种传输方式。官方的配置文档: http://activemq.apache.org/configuring-transports ActiveMQ常用的传输方式及配置 TPC:由于TCP具有可靠传输的特性,它在ActiveMQ中也是最常使用的一种协议。默认的配置中,TCP连接的端口为61616. TCP配置格式:tcp://hostname:port?key=value TCP配置参数说明:在服务端配置时,参数要以“transport.”开头,在客户端连接时,参数省略“transport.”前缀 TCP服务端配置示例:tcp://localhost:61616?transport.trace=false&transport

大数据常见英文词汇(待更新)

你说的曾经没有我的故事 提交于 2020-04-21 04:01:18
大数据常见英文词汇(待更新) words(单词) resilient 有弹性的 parallelize 并行化 procedure 过程 process 进程、处理 program 程序 schedule 日程安排 scheduler 调度程序 schema 架构 segment 段 operation 算子 convergence 汇聚 visualize 可视化 plugin 插件 transactional 事务性 integrity 完整 slot 窄缝,扁口;位置,时间,机会 a bunch of 一群 ELK elasticsearch 弹性搜索 logstash 日志存放 kibana vertical bar 竖条 dash board 仪表盘 Covariance 协方差 constraints 约束条件 repository 存储库 Parquet 镶木地板 specify 指定 immutable 不变的 block 块 greater than gt 大于 less than lt 小于 Phrases(词组) Streaming data processing (基于实时)数据流的数据处理 interactive query (基于历史数据的)交互式查询 batch data processing (复杂的)批量数据处理 URI (Uniform

RabbitMq核心概念和术语

倾然丶 夕夏残阳落幕 提交于 2020-04-18 07:34:14
简介 越来越多的消息中间件很容易让人产生混淆,在学习一种消息中间件的时候,最好先了解他的几种抽象概念,方便你理解,明白了这些概念,你学习起来的时候也就得心应手,同时也是使用好RabbitMQ的基础。 核心概念 Producer Message Consumer AMQP Queue Message acknowledgment Message durability Prefetch count Exchange RoutingKey Binding Binding key Exchange Types <!--more--> AMQP Producer Message Consumer 过于简单,我就不介绍了。AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。 AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。 RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写。用于在分布式系统中存储转发消息 Message acknowledgment message ackonwledgment 即消息回执,消费者在消费完消息后发送一个回执给rabbitmq

RabbitMQ(一):RabbitMQ快速入门

与世无争的帅哥 提交于 2020-04-18 07:33:51
RabbitMQ是目前非常热门的一款消息中间件,不管是互联网大厂还是中小企业都在大量使用。作为一名合格的开发者,有必要对RabbitMQ有所了解,本文是RabbitMQ快速入门文章,主要内容包括RabbitMQ是什么、RabbitMQ核心概念、常用交换器类型、用Docker安装RabbitMQ等。 RabbitMQ简介 以熟悉的电商场景为例,如果商品服务和订单服务是两个不同的微服务,在下单的过程中订单服务需要调用商品服务进行扣库存操作。按照传统的方式,下单过程要等到调用完毕之后才能返回下单成功,如果网络产生波动等原因使得商品服务扣库存延迟或者失败,会带来较差的用户体验,如果在高并发的场景下,这样的处理显然是不合适的,那怎么进行优化呢?这就需要消息队列登场了。 消息队列提供一个异步通信机制,消息的发送者不必一直等待到消息被成功处理才返回,而是立即返回。消息中间件负责处理网络通信,如果网络连接不可用,消息被暂存于队列当中,当网络畅通的时候在将消息转发给相应的应用程序或者服务,当然前提是这些服务订阅了该队列。如果在商品服务和订单服务之间使用消息中间件,既可以提高并发量,又降低服务之间的耦合度。 RabbitMQ就是这样一款我们苦苦追寻的消息队列。RabbitMQ是一个开源的消息代理的队列服务器,用来通过普通协议在完全不同的应用之间共享数据。 RabbitMQ是使用Erlang语言来编写的