`
huangyongxing310
  • 浏览: 496419 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

各种MQ应用分式

 
阅读更多
RabbitMQ

RabbitMQ有一个交换机(Exchange)决定消息分发到那些队列中
交换机有四种类型:
Direct:direct 类型的行为是"先匹配, 再投送". 即在绑定时设定一个 routing_key, 消息的routing_key 匹配时, 才会被交换器投送到绑定的队列中去.
Topic:按规则转发消息(最灵活)
Headers:设置header attribute参数类型的交换机
Fanout:转发消息到所有绑定队列

多个消费者定阅同一个队列,只有一个消费者可以得到的消息,消费完消息会删除
多种应用消费者要消费同样的消息,可以建立不同的队列,以Topic转发规则匹配到多个队列中实现

消息消费后就不再存在
https://www.cnblogs.com/ityouknow/p/6120544.html

为了确保消息不会丢失,RabbitMQ支持消息应答。
https://blog.csdn.net/a491857321/article/details/50670238


RabbitMQ在服务端没有声明队列和消息持久化时,队列和消息是存在内存中的,服务端宕机了,队列和消息也不会保留。
服务端声明持久化,客户端想接受消息的话,必须也要声明queue时,也要声明持久化,不然的话,客户端执行会报错。


https://www.jianshu.com/p/6376936845ff(消息中间件—RabbitMQ(集群原理与搭建篇))

RocketMQ
支持发布/订阅(Pub/Sub)和点对点(P2P)消息模型

单一队列百万消息的堆积能力
Tag标签可以被认为是对 Topic 进一步细化。一般在相同业务模块中通过引入标签来标记不同用途的消息。
Name Server 为 producer 和 consumer 提供路由信息。
NameServer: 提供轻量级的服务发现和路由。
一个topic可以对应多个queue,多消都多生产时用于提高吞吐量
延时消息
延时消息,简单来说就是当 producer 将消息发送到 broker 后,会延时一定时间后才投递给 consumer 进行消费。

发布/订阅(Pub/Sub)
消息会一直持久化在broker中,通过一定的策略来删除消息

集群消费,一个消息只会被同一个组的消费者中的一个消费者消费

支持分组消费,就是不同应用可以订阅同一个topic,但属于不同的消费组,每个组的消费者都会消费同一topic里的所有消息,

消息支持应答,如果没有应答就会发送到同组的其他消费者消费(return ConsumeOrderlyStatus.SUCCESS;)

发布/订阅模式,消息消费后还存有,会保存一份,更改分组名后可以重新消费之前的所有消息

P2P模式,一个消息只有一个真正的消费者,因为消息取走了之后,消息就不会在broker存在了

每个组的消费信息会保存到broker中

当 consumer 使用集群消费时,每条消息只会被 consumer 集群内的任意一个 consumer 实例消费一次。

https://www.jianshu.com/p/824066d70da8
https://blog.csdn.net/iie_libi/article/details/54289580
https://mp.weixin.qq.com/s/QdNQFG6ohhPpNppScEXdUQ



activemq

两种数据结构:Queue/Topic
1.Queue队列,生产者生产一个消息,只能由一个消费者进行消费.
2.Topic 话题.生产者生产一个消息,可以由多个消费者进行消费.,
支持消费应答

多个一样的消费者可以用Queue,但不同应用要相同的数据就不能用Queue,因为同一个消息只会有一个消费者消费
多个应用接收相同消息可用Topic,但一个应用不能有多个了,否则同一个消息会消费多次
如果多应用多节点就只能多开Queue的方式进行处理了

Topic模式只对在线的消费者发送消息,
Queue队列模式后面再上线也会接收到之前的消息

对于这种点对点的发送方式而言,一旦服务器中的消息被相应的消费者消费后,对应的消息就会立刻被移出消息队列。

对于发布订阅式的通信模式而言,消费者必须先于生产者而启动,否者的话,消费者是接收不到相应的消费消息的。


https://www.cnblogs.com/xiohao/p/4835594.html
https://www.cnblogs.com/xiohao/p/4835594.html


https://blog.csdn.net/zhangll_2008/article/details/78657177(分布式消息中间件-Rocketmq)
https://www.cnblogs.com/xiaodf/p/5075167.html(阿里 RocketMQ 安装与简介)



kafka
支持应答
支持分组消费
支持重新消费之前的数据(offect)




消费事务
https://www.cnblogs.com/xuwc/p/9034352.html



//1.发送端,先在同一个事务中把消息放入数据库,发送成功后再把数据库的消息删除或更换状态。(要求数据库事务一致性,路由到同一个库就可以实现了),发送失败就由下一次的发送或后台定时任务进行处理。

2.发送失败,重试N次还是失败,保存到DB,由后台线程进行发送。(这种方式业务会简单一占)
存在问题,逻辑处理了,但消息没有发送就宕机了,所以单库就放到逻辑事务中就可以了,如果多库就要解多库的事务问题(如分到同一个库中),发送后删除。后台找到没发送的重发

https://blog.csdn.net/qq_32020035/article/details/82113751

//接收端,处理与消息去重在同一事务中进行,操作完成再回ACK给MQ,这样就可以保证消息不会被重复消费。

接收端接收到消息时就先向去重表放一条数据,再在事务中做逻辑处理,消息回应放到事务里面,以备失败回滚,同样存在插入了,但逻辑失败

高并发下去重:加上缓存加快去重查询操作


//接收端,
1.查询ID是否在去重表,是不处理。否插入到去重表。
2.执行逻辑处理(执行多次(最好有一定延时)),成功返回MQ的ACK。失败,去重表删除ID(重试多次(最好有一定延时)),成功就退出(不回ACK),删除失败,写消息到日志中(手工进行恢复).
3.2中如果写日志失败也会存在问题,所以如果是重复的就把消息写和另一个日志进行保存.

//接收端,
1.保证去重和逻辑处理在同一个库中进行处理,以消息ID和逻辑处理的ID拼接路由到同一个库实现。(保证去重表与逻辑处理的一致性),这样就可以解决不一致的问题了.



kafka在一台普通的服务器上既可以达到10W/s的吞吐速率



分享到:
评论

相关推荐

    Websphere MQ应用架构以及性能调优和测试

    Websphere MQ应用架构以及性能调优和测试,IBM内部保密资料。

    WebSphere MQ应用经验介绍.ppt

    WebSphere MQ应用经验介绍.pptWebSphere MQ应用经验介绍.pptWebSphere MQ应用经验介绍.pptWebSphere MQ应用经验介绍.ppt

    IBM MQ应用编程指南

    《IBM MQ应用编程指南》是一本面向开发人员的详尽参考资料,旨在帮助读者掌握如何使用各种编程语言与IBM MQ进行交互,实现高效、稳定的消息传递。IBM MQ是业界广泛采用的企业级消息中间件,它提供了可靠的异步通信...

    WebSphere MQ应用经验介绍

    有关MQ很好的范例教程,该文档是有关MQ应用的实例讲解

    MQ 简单的应用培训

    ### Websphere MQ 简单的应用培训 #### 1. Websphere MQ 原理 ##### 1-1. 什么是中间件 中间件是位于应用软件和系统软件之间的一种可复用基础软件,它的主要作用是通过自身的复杂性来换取应用软件的简化。中间件...

    IBM WebSphere MQ入门教程.pdf

    WebSphere MQ 可以应用于各种需要异步通信的场景,例如: * 订单处理系统:WebSphere MQ 可以用于订单处理系统,实现订单的异步处理。 * 支付系统:WebSphere MQ 可以用于支付系统,实现支付的异步处理。 * 论坛...

    MQ应用入门+-+DeluxWorld的专栏+-+2018版

    《MQ应用入门》是DeluxWorld专栏在2018年发布的一份针对IBM MQ初学者的教程资源,旨在帮助那些刚开始接触MQ6.X或7.X版本的开发者快速熟悉并掌握消息队列(MQ)的基本概念和开发技巧,避免在学习过程中迷失方向。...

    WebSphere+MQ应用经验介绍.ppt

    WebSphere+MQ应用经验介绍.ppt

    IBM_MQ下载

    描述中的“IBM webSphere Mq应用jar包集合”是指IBM MQ提供的Java开发包,这些JAR文件包含了开发和运行与MQ交互的Java应用程序所需的类和资源。这些库使得开发者能够在Java环境中编写代码,以便发送、接收和管理MQ...

    mq客户端安装包7.5.0.3

    客户端包含了所有必要的库和工具,使得开发人员可以在各种操作系统平台上构建MQ应用,如Windows、Linux、Unix等。 2. **版本7.5.0.3**:这是MQ客户端的一个特定版本,每个版本可能包含性能优化、新功能、安全修复或...

    Websphere MQ资料集合(包含精通mq、mq java编程、mq编程模式、mq for linux等)

    5. **MQ编程模式**:探索各种MQ编程模式,如同步和异步消息处理,以及如何设计高效、健壮的MQ应用。 6. **故障排查与性能优化**:学习如何诊断MQ相关的问题,以及如何调整MQ配置以提高性能和可扩展性。 7. **安全...

    Websphere MQ实现应用程序通信

    ### Websphere MQ 实现应用程序通信详解 #### 一、概述 IBM WebSphere MQ(简称WMQ)是一种消息中间件,用于实现不同应用程序之间的通信。它支持多种平台和语言,能够在分布式环境中提供可靠的消息传递服务。本文将...

    mq.rar_MQ_ibm mq 实例代码_ibm mq 文件传输_ibm mqput怎么用_put

    总的来说,IBM MQ提供了一套强大且灵活的消息传递机制,适用于各种企业级应用。通过`mqput`命令和相应的API,开发人员可以轻松地实现在不同系统间的数据交换,确保了系统的稳定性和效率。理解并熟练运用这些工具和...

    IBM WebSphere MQ 安装包

    作为MQ系列产品的基石,WebSphere MQ为不同系统间的通信提供了强大的支持,确保了企业应用之间的稳定、高性能和可靠的通讯。 1. **消息中间件概念**:消息中间件是连接分布式系统的一种软件,它通过消息队列进行...

    IBM MQ Explore windows下安装包

    IBM MQ Explore是一款强大的工具,专为管理IBM WebSphere MQ(以前称为IBM Message Queuing或IBM MQ)环境而设计。...确保遵循正确的安装步骤,并充分利用其提供的各种管理选项,以优化IBM MQ的运行效率和稳定性。

    JAVA IBM MQ 接收、发送

    JMS是Java平台上的一个标准接口,用于访问各种消息中间件,包括IBM MQ。在IBM MQ中,JMS被封装在com.ibm.mq.allclient.jar库中,我们需要将其添加到项目依赖中。 发送消息到IBM MQ的步骤如下: 1. **初始化...

    利用MQ实现分布式应用系统间数据传输.pdf

    【分布式应用系统间数据传输】是现代IT领域中的重要课题,而【利用MQ实现分布式应用系统间数据传输】则是一种常见的解决方案。MQ,即Message Queue(消息队列),是IBM公司的WebSphere MQ中间件,它提供了一种高效、...

    MQ,websphere mq

    3. **编程接口**:了解如何使用各种编程语言(如Java的JMS API,C的API等)与WebSphere MQ交互。 4. **管理和监控**:学习如何配置、管理和监控WebSphere MQ环境,包括性能监控、故障排查和日志分析。 5. **安全性...

    mq2例程与mq系列灵敏度特性曲线仿真程序.zip

    总结来说,这个压缩包提供的内容涵盖了MQ2气体传感器的MATLAB仿真、硬件驱动程序以及通信协议的实现,对于理解MQ2的性能特性、开发相关应用以及构建基于STM32F103和Modbus RS485网络的监控系统具有重要的参考价值。...

Global site tag (gtag.js) - Google Analytics