mq

Rabbit MQ amqplib error “No channels left to allocate”

匿名 (未验证) 提交于 2019-12-03 00:11:01
今天在查看 node.js 服务日志的时候发现 amqplib 模块报错 No channels left to allocate 。是服务没有复用通道,创建了太多的 channel 导致该问题,通过调试找到报错的问题,在 amqplib/lib/connection.js 中 freshChannel 函数中报错。 具体代码如下: // I use an array to keep track of the channels, rather than an // object. The channel identifiers are numbers, and allocated by the // connection. If I try to allocate low numbers when they are // available (which I do, by looking from the start of the bitset), // this ought to keep the array small, and out of 'sparse array // storage'. I also set entries to null, rather than deleting them, in // the expectation that the next

MQ相关

匿名 (未验证) 提交于 2019-12-03 00:09:02
消息中间件模式分类 点对点 PTP点对点:使用queue作为通信载体 消息被消费以后,queue中不再存储,所以消息消费者不可能消费到已经被消费的消息。 Queue支持存在多个消费者,但是对一个消息而言,只会有一个消费者可以消费。 发布/订阅 消息生产者(发布)将消息发布到topic中,同时有多个消息消费者(订阅)消费该消息。和点对点方式不同,发布到topic的消息会被所有订阅者消费。 topic实现了发布和订阅,当你发布一个消息,所有订阅这个topic的服务都能得到这个消息,所以从1到N个订阅者都能得到一个消息的拷贝。 MQ 如何保证消息的顺序性? RabbitMQ、Kafka https://github.com/doocs/advanced-java/blob/master/docs/high-concurrency/how-to-ensure-the-order-of-messages.md RocketMQ https://www.cnblogs.com/xuwc/p/9034352.html 保证生产者 - MQServer - 消费者是一对一对一的关系 。。。 RocketMQ怎么实现发送顺序消息: Producer端确保消息顺序唯一要做的事情就是将消息路由到特定的分区,在RocketMQ中,通过MessageQueueSelector来实现分区的选择。

IBM MQ

匿名 (未验证) 提交于 2019-12-03 00:09:02
WebSphere MQ 概念 消息队列 框架,介于应用和操作系统之间,相关应用的基础平台。 确保消息不丢失不复传 。 通信以及对通信错误的恢复是由队列管理完成的 。 WebSphere MQ 主要对象 数据的传输载体,与应用系统交互的数据均被包装成消息。 是用于存储消息的数据结构 。按功能可以分为本地队列、远程队列、传输队列、模板队列、别名队列、死信队列等等。 队列管理器 在WebSphere MQ中队列管理器是基本的软件系统,队列管理器可看成是 队列和其他对象的容器 。 是一种提供从 一个队列管理器到另一个队列管理器的通信路径 。它又叫消息通道,用在分布式的队列把消息从一个队列管理器发送到另一个队列管理器。 MQSC 命令 是用来管理队列管理器对象,包括队列管理器本身、通道、队列和进程定义。 可以使用 runmqsc 向队列管理器发出 MQSC 命令。 ͼ 3 每个通道定义都属于特定队列管理器,队列管理器可具有同一类型或不同类型的几个通道。通道的每一端是程序消息通道代理程序(MCA)。在通道的一端, 调用方 MCA从传输队列取出消息并通过通道发送它们。在通道的另一端,响应方MCA接收这些消息并将它们传递至远程队列管理器。 调用方 MCA 可与发送方通道、服务器通道或请求方通道关联。响应方 MCA 可与消息通道的任何类型关联。 进程 侦听器 上图显示了 IBM WebSphere

快速掌握消息队列RabbitMQ

匿名 (未验证) 提交于 2019-12-03 00:04:02
※快速掌握消息队列RabbitMQ 一.RabbitMQ概述 (一)什么是消息队列MQ 消息队列(Message Queue),后文称MQ,是一种 跨进程的通信机制,用于上下游传递消息。 MQ作为消息中间件,最主要的作用系统之间的信息传 递进行“解耦”,MQ是数据可靠性的重要保障。 (二)什么是RabbitMQ RabbitMQ是全世界最火的开源消息代理服务器, 在全世界拥有超过35000个项目部署在 RabbitMQ。 RabbitMQ支持几乎所有的操作系统与编程语言。 Rabbit提供了高并发、高可用的成熟方案,支持 多种消息协议,易于部署与使用。 (三)和同类产品比较 (四)RabbitMQ应用场景 异构系统的数据传递 高并发程序的流量控制 基于P2P,P2PPP的程序 分布式系统的事务一致性TCC 高可靠性的交易系统 二.RabbitMQ单点安装 (一)安装步骤 (二)常用命令 启动与关闭 rabbitmq-server 前台启动服务 rabbitmq-server -detached 后台启动服务 rabbitmqctl stop 停止服务(相当于关闭进程) 终止与启动应用 rabbitmqctl start_app 启动应用 (不会关闭进程) rabbitmqctl stop_app 终止应用 用户管理 rabbitmqctl set_permissions -p /

mqtt 与 MQ 的区别

匿名 (未验证) 提交于 2019-12-02 23:59:01
mqtt 与 MQ 的区别: mqtt :一种通信协议,类似人类交谈中的汉语、英语、俄语中的一种语言规范 MQ :一种通信通道,也叫消息队列,类似人类交谈中的用电话、email、微信的一种通信方式 json :一种内容格式,类似人类交谈中的排比句等方式 市面上的MQ产品很多,如阿里自研并开源RocketMQ,还有类似RabbitMQ、ActiveMQ,他们不管支持MQTT协议,还支持如AMQP、stomp协议等等, EMQ 使用的协议是mqtt 。 详细区别: 有三个基本概念:消息、消息协议、消息队列。 消息 :信息的载体 消息协议 :为了让消息发送者和消息接收者 都能够明白 消息所承载的信息(消息发送者需要知道如何构造消息;消息接收者需要知道如何解析消息),它们就需要按照一种统一的格式描述消息,这种统一的格式称之为消息协议。所以,有效的消息一定具有某一种格式;而没有格式的消息是没有意义的。 消息队列 :消息从发送者到接收者的方式也有两种。 一种为 即时消息通讯 ,也就是说消息从一端发出后(消息发送者) 立即就可以达到另一端( 消息接收者),这种方式的具体实现就是我们已经介绍过的 RPC ( 当然单纯的http通讯也满足这个定义 ); 另一种为 延迟消息通讯 ,即消息从某一端发出后,首先进入一个 容器进行临时存储 ,当达到某种条件后,再由这个容器发送给另一端。

MQ

匿名 (未验证) 提交于 2019-12-02 23:49:02
1.什么是MQ,有什么用? MQ 是message queue ,消息队列,也叫消息中间件,遵守JMS(java message service)规范的一种软件。(同时还有另一个叫AMQP的应用层协议,语言无关性不受产品 语言等限制,rabbitMQ支持这个 ) 是类似于数据库一样需要独立部署在服务器上的一种应用,提供接口给其他系统调用。 主要用于各个系统之间通信的解耦。 举例: 比如登陆系统,在登陆之后需要调用短信系统给用户发短信说已经登陆,同时还需要调用日志系统记录登陆日志,需要调用积分系统对登陆签到的积分进行增加 等等等。 这种情况下,登陆系统和日志系统,短信系统,积分系统等等 强耦合,其中存在可能调用失败,信息丢失等风险,同时会提高系统复杂度。 比如说登陆之后调用日志系统失败,那么该次登陆的日志信息就会丢失,无法再找回。 而且顺序执行,会导致登陆系统运行效率低。 那么如果使用消息中间件,登陆之后只需要将任务推入到消息队列中,就不用去管了。其他系统则从队列中去获取任务。 实现解耦和异步调用 (异步是相对于同步而言,同步是就等待,当系统执行某个任务的时候,一定要等到该任务结束,系统才会继续往下执行,异步则不等待。) 同时还有可以实现横向拓展 安全可靠优点 2.常见MQ的类型 activeMQ 对java支持良好,缺点是对其他语言支持不够友好,适合中小企业系统 rabbitMQ

POSIX 消息队列

匿名 (未验证) 提交于 2019-12-02 23:49:02
1.消息队列是什么? (1)消息队列是一种IPC方式。 (2)存放于内核中,借助VFS实现,挂载于/dev/mqeueue下。 (3)采用数据结构:带优先级的队列 2.消息队列与管道的比较 (1)管道类似于打电话,消息队列类似于邮件。 (2)管道通信,必须发送方和接收方都打开管道,否则通信失败或无意义。 (3)消息队列,发送方和接受方可以不同时读写消息队列, 3.POSIX 与 SystemV 消息队列比较 POSIX更新,更简单,功能更强大。 (1) 对Posix消息队列的读总是返回最高优先级的最早消息,对System V消息队列的读则可以返回任意指定优先级的消息。 (2)当往一个空队列放置一个消息时,Posix消息队列允许产生一个信号或启动一个线程,System V消息队列则不提供类似的机制。 4.apiѧϰ (0)链接POSIX消息队列 使用 -lrt (1)创建一个消息队列文件 使用API: mqd_t mq_open(const char *name, int oflag); mqd_t mq_open(const char *name, int oflag, mode_t mode, struct mq_attr *attr); void creat_mq(const char *mq_name) { int oflag; mode_t mode; mqd_t mqd

MQ 2539错误

匿名 (未验证) 提交于 2019-12-02 23:49:02
原文链接: http://www.cnblogs.com/fromchaos/archive/2010/02/24/1672736.html 今天重新配置了MQ服务器,把MQ服务器移动到繁体的Server上啦.配置OK.用我的客户端连接去始终报 2539错误. IBM帮助文件给出的解释. 2539 (09EB) (RC2539): MQRC_CHANNEL_CONFIG_ERROR Explanation An MQCONN call was issued from a client to connect to a queue manager but the attempt to establish communication failed. Common causes of this reason code are: The server and client cannot agree on the channel attributes to use. There are errors in one or both of the QM.INI or MQCLIENT.INI configuration files. The server machine does not support the code page used by the client. 我在服务器上重新配置客户端

消息队列MQ

匿名 (未验证) 提交于 2019-12-02 23:49:02
1、MQ的应用场景   a)主要解决异步消息   b)应用解耦   c)流量消峰等问题   d)日志处理(kafka) 2、JMS消息模型    a)P2P(Point to Point)点对点模式(也就是一个任务只能被一个消费者消费)     1、包含三个角色:消息队列(Queue),发送者(Sender),接受者(Receiver)     2、简单队列(一对一)     3、工作队列(轮循队列)(一对多)     4、平分队列(能者多劳)(一对多)    b)Publish/Subscribe(Pub/Sub)发布订阅模式     1、包含三个角色:主题(Topic),发布者(Publisher),订阅者(Subscriber)     2、一个生产者,多个消息者     3、每个消费者都有自己的队列     4、生产者没有直接把消息发送到队列,而是发送到交换机 转发器exchange     5、每个队列都要绑定到交换机上     6、生产者发送的消息经过交换机到达队列,就能实现一个消息被多个消费者消费      7、 Exchange (交换机 转发器)       1、一方面是接受生产者的消息,另一方面是向队列推送消息       2、匿名转发       3、 Fanout (不处理路由键,广播)       4、 Direct (处理路由键,发布与订阅,完全匹配)