mq

想使用消息队列,先考虑下这些问题!

倖福魔咒の 提交于 2019-12-02 11:22:03
原创:Java派(微信公众号:Java派),欢迎分享,转载请保留出处。 消息队列优势 消息队列(Message Queue,简称MQ),其主要用于在复杂的微服务系统中进行消息通信,它的优点可以大致整理成以下几点: 服务间解耦 提高服务并发、性能 突发流量削峰 ... 服务间解耦 微服务系统业务之间相互依赖,各种调用错综复杂,如果不能良好对服务进行解耦那一个服务的可用性、并发都会受到其他服务的影响。 在没有引用MQ的之前服务调用大概是这些步骤: 图上的A服务是直接调用的,这是没啥问题的,但是服务上线后要迭代更新的麻,这个时候要是服务C的开发人员有点代码小洁癖说:我这个C服务接口命名不太好,我需要重新更新下,当A服务的小哥哥还戴着小耳机听着小歌曲,突然就得改代码了~~。 后来负责服务C的那小哥哥也不好意思了,提出大家一起使用MQ吧,于是A、C的调用就变成下面这个样子了: 服务A不直接调用C而是向消息队列中发送消息(生产者),另一边的C取出队列中的消息(消费者)进行处理,这样A、C就完成了解耦。 提高服务并发、性能 举个例子,在没引入MQ之前服务调用多个服务都是同步调用,比如像这样: 服务A要顺序的调用B、C服务来完成业务逻辑如果 A->B 需要200ms, A->C 需要200ms,再加上自身业务逻辑处理可能需要花费500ms,其中有400ms是调用A和B的花费

Websphere MQ issue while writing a message to queue from java program

♀尐吖头ヾ 提交于 2019-12-02 07:39:10
I am trying to put a message to Queue from a Java program, I am getting an issue where it says it unable to connect to the host & it seems it is not able to read the channel. Here is the error from AMERR01.log ----- amqccita.c : 4113 ------------------------------------------------------- 07/25/2016 07:04:29 AM - Process(18280.26) User(mqm) Program(amqrmppa) Host(ip-10-0-0-238) Installation(Installation1) VRMF(8.0.0.4) QMgr(CSBTS.QUEUE.MANAGER) AMQ9209: Connection to host 'ip-10-0-0-238 (10.0.0.238)' for channel 'CHAN2' closed. EXPLANATION: An error occurred receiving data from 'ip-10-0-0-238

ActiveMQ配置详解

岁酱吖の 提交于 2019-12-02 04:51:28
原文链接 一.消息目的地策略 在节点destinationPolicy配置策略,可以对单个或者所有的主题和队列进行设置,使用流量监控,当消息达到memoryLimit的时候,ActiveMQ会减慢消息的产生甚至阻塞,destinationPolicy的配置如下: <!-- Destination specific policies using destination names or wildcards --> <!-- wildcards意义见http://activemq.apache.org/wildcards.html --> <destinationPolicy> <policyMap> <policyEntries> <!-- 这里使用了wildcards,表示所有以Msg开头的topic --> <policyEntry topic="Msg.>" producerFlowControl="false" memoryLimit="10mb"> <!-- 分发策略 --> <dispatchPolicy> <!-- 按顺序分发 --> <strictOrderDispatchPolicy/> </dispatchPolicy> <!-- 恢复策略--> <subscriptionRecoveryPolicy> <!-- 只恢复最后一个message -->

php使用rabbitmq

大城市里の小女人 提交于 2019-12-02 03:42:55
一台网页服务器,一台MQ服务器,网页服务器PHP使用MQ 首先php需要安装php MQ扩展 来源: https://www.cnblogs.com/yipianchuyun/p/11729636.html

RocketMq之Netty通讯源码解析

时光怂恿深爱的人放手 提交于 2019-12-02 03:33:30
1,RocketMq四大核心组件: 在 RocketMQ里,有以下几个核心的模块: Producer , Consumer , Broker , NameSrv 。他们之间的关系如下 先简单了解一下各个模块的功能,下面会有章节详细介绍各个模块的功能。 Producer和Consumer很好理解,顾名思义就是生产者和消费者,生产者负责生产消息,消费者负责消费消息,这2块的逻辑都是由业务使用者定义的。 Broker是RocketMQ的核心,Broker实现了 消息的存储、拉取 等功能。 Broker通常以集群方式启动,并可配置主从,每个Broker上提供对指定topic的服务。理解了Broker的原理,以及和其他服务交互的方式就基本弄懂了整个消息中间件的原理。 NameSrv是一个无状态的名称服务,可以集群部署。所有Broker启动的时候会向NameSrv注册自己的信息。Producer会根据目标topic从NameSrv获取到达指定Broker的路由信息,Consumer同理。 对于 Producer端RocketMQ采用了轮询的方式保证了负载均衡,Consumer端通常采用cluster集群方式消费消息,我们可以自己定义消息在消息端的分配方式。另外,MQ还提供了顺序消息的特性,简单了解一下MQ提供的特性即可,具体实现后面章节会进行阐述。 2,RocketMQ包结构详析:

windows下RocketMQ的安装部署

泄露秘密 提交于 2019-12-01 13:24:00
一.预备环境 1.系统 Windows 2. 环境 JDK1.8、Maven、Git 二. RocketMQ部署 1.下载 1.1地址:http://rocketmq.apache.org/release_notes/release-notes-4.2.0/ 1.2选择‘Binary’进行下载 1.3解压已下载工程 2. 配置 2.1 系统环境变量配置 变量名:ROCKETMQ_HOME 变量值:MQ解压路径\MQ文件夹名 2.2重启服务器 3. 启动 3.1 启动NAMESERVER Cmd命令框执行进入至‘MQ文件夹\bin’下,然后执行‘start mqnamesrv.cmd’,启动NAMESERVER。成功后会弹出提示框,此框勿关闭。 3.2 启动BROKER cmd命令框执行进入至‘MQ文件夹\bin’下,然后执行‘start mqbroker.cmd -n 127.0.0.1:9876 autoCreateTopicEnable=true’,启动BROKER。成功后会弹出提示框,此框勿关闭。 假如弹出提示框提示‘错误: 找不到或无法加载主类 xxxxxx’。打开runbroker.cmd,然后将‘%CLASSPATH%’加上英文双引号。保存并重新执行start语句。 三. RocketMQ插件部署 1. 下载 地址:https://github.com/apache

SpringCloud之RabbitMQ安装

◇◆丶佛笑我妖孽 提交于 2019-12-01 10:11:01
  本篇章讲解RabbitMQ的用途、原理以及配置,RabbitMQ的安装请查看 SpringCloud之RabbitMQ安装 一、MQ用途   1、同步变异步消息   场景:用户下单完成后,发送邮件和短信通知。   运用消息队列之后,用户下单完之后,下单信息写入数据库,再写入消息队列,发送邮件和发送短信各自去消息队列进行读取,节省时间,提高效率。          2、应用解耦   场景:用户下单后,订单系统需要多渠道通知用户。   下单服务系统:用户使用下单服务后,将下单信息写入数据库,下单成功。   短信服务系统:用户下单后,将短信信息写入消息队列,以发送短信信息通知用户交易信息。   邮件服务系统:用户下单后,将邮件信息写入消息队列,以发送邮件信息通知用户交易信息。   这样,如果微信通知不能正常使用,也不影响用户下单,用户下单后,只用把下单通知信息写入消息队列,不用关心后续操作,实现了订单系统和通知系统的解耦。                3、流量削峰   一般在秒杀或者团购活动中使用。   场景:秒杀活动,一般会因为流量过大,导致流量暴增,应用挂掉。针对这个问题,一般需要在应用前端加入消息队列。     a.可以控制活动的人数     b.可以缓解短时间内高流量压垮应用   用户的请求,服务器接收后,首先写入消息队列,如果消息队列的数量大于最大的数量

消息队列MQ详解

▼魔方 西西 提交于 2019-12-01 09:49:17
为什么选择使用消息队列   我们不会平白无故引入一个技术栈,一定是看重它的某些特性,毕竟引入一个技术可能存在弊端和风险。我们在谈论为什么使用消息队列的时候一定要根据具体业务来,比如在实际业务中遇到了什么困难,如果不使用消息队列就很棘手,通过使用消息后解决了哪些问题。这里总结了三点比较核心原因:解耦、异步、削峰。 解耦   在某个场景下,A系统需要向BCD系统通过接口调用发送一条数据过去,这个时候E系统也要数据,D系统也要数据,此时A系统内心肯定是崩溃的。   上诉场景中A系统和其他系统耦合性很高,每当产生一条数据的时候A系统都要考虑到其他系统是否在线?是否挂掉?是否接收正常?所以A系统真的是太难了!   如果使用MQ,A系统产生一条数据后就放进MQ,其他系统需要就自己到MQ系统中去消费,不需要就可以取消对该消息的订阅,A系统压根不需要再考虑给其他系统发送数据的各种乱七八糟问题。   总结:通过一个 MQ,Pub/Sub 发布订阅消息这么一个模型,A 系统就跟其它系统彻底解耦了。 异步   在某场景下,A系统收到一条数据后需要在自己本地写库,同时还要在BCD三个系统写库,自己本地写库要 3ms,BCD 三个系统分别写库要 300ms、450ms、200ms。总共要延时3 + 300 + 450 + 200 = 953ms,接近 1s啊,对强迫症的人来说简直要爆炸!  

如何构建批流一体数据融合平台的一致性语义保证?

馋奶兔 提交于 2019-12-01 09:45:09
作者:陈肃 整理:周奇,Apache Flink 社区志愿者 本文根据陈肃老师在 Apache Kafka x Flink Meetup 深圳站的分享整理而成,文章首先将从数据融合角度,谈一下 DataPipeline 对批流一体架构的看法,以及如何设计和使用一个基础框架。其次,数据的一致性是进行数据融合时最基础的问题。如果数据无法实现一致,即使同步再快,支持的功能再丰富,都没有意义。 另外,DataPipeline 目前使用的基础框架为 Kafka Connect。为实现一致性的语义保证,我们做了一些额外工作,希望对大家有一定的参考意义。 最后,会提一些我们在应用 Kafka Connect 框架时,遇到的一些现实的工程问题,以及应对方法。尽管大家的场景、环境和数据量级不同,但也有可能会遇到这些问题。希望对大家的工作有所帮助。 一、批流一体架构 批和流是数据融合的两种应用形态 下图来自 Flink 官网。传统的数据融合通常基于批模式。在批的模式下,我们会通过一些周期性运行的 ETL JOB,将数据从关系型数据库、文件存储向下游的目标数据库进行同步,中间可能有各种类型的转换。 另一种是 Data Pipeline 模式。与批模式相比相比, 其最核心的区别是将批量变为实时:输入的数据不再是周期性的去获取,而是源源不断的来自于数据库的日志、消息队列的消息。进而通过一个实时计算引擎

Rabbit MQ部署步骤

半腔热情 提交于 2019-12-01 09:02:48
MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。MQ是消费-生产者模型的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取队列中的消息。 RabbitMQ是MQ的一种。下面详细介绍一下RabbitMQ的安装与配置,话不多说了,来一起看看吧 一、下载 Rabbit MQ 是建立在强大的Erlang OTP平台上,因此安装RabbitMQ之前要先安装Erlang。 erlang:http://www.erlang.org/download.html rabbitmq:http://www.rabbitmq.com/download.html 二、安装 下载之后先安装erlang后安装rabbitmq,这里我把这两个安装在了D:\Program Files 三、配置 1.使用RabbitMQ 管理插件,可以更好的可视化方式查看Rabbit MQ 服务器实例的状态。 打开命令窗口: 输入命令: rabbitmq-plugins.bat enable rabbitmq_management 2.重启服务器 net stop RabbitMQ && net start RabbitMQ 此时会出现上面的错误,原来是需要用管理员的角色。重新已管理员打开cmd命令窗口执行命令。 此时服务已经启动。 3.用户及权限管理