rocketmq架构解析以及rabbimq对比

对比rabbitmq

为了偷懒,拿了张本人过往rabbimq老图,多了点没必要的connection细节

1 rocketmq的queue水平拆分了一个topic的消息,而rabbitmq最多只能做到筛选消息,queue之间并没有关联。

2 生'''产者和消费者指向的都是proxy,简化了操作者的配置。proxy可以通过负载均衡来选择消费者组将要消费的队列,从而选择消费者组所要消费的队列。rabbitmq需要手动指定生产者的exchanger和消费者的queue。

2 rocketmq有自己的存储淘汰机制以及offset机制,从而使得queue的内容可以复用。而rabbitmq更像一个buffer,阅后即删。

3 rocketmq有自己的messageGroup和messageId机制,从而保证了自己可以在消费者组多消费者消费时,依然还可以保持顺序机制。而rabbitmq的顺序机制必须指定单一消费者消费队列,来保证顺序。

4 rocketmq原生支持事务机制,可以保证在broker和生产者之间完成分布式事务。而rabbitmq虽然也可以实现分布式事务,但是是由生产者和消费者之间达成的,多了一层broker,提高了复杂度,性能还更差。

从crud感知架构

对于消费者而言,需要完成消费类型(推/拉),消费者组,消费过滤条件(tag),topic选择

Java 复制代码
    @Test
    public void t1() throws Exception {
        final ClientServiceProvider provider = ClientServiceProvider.loadService();
        String endpoints = "192.168.96.200:8081";
        ClientConfiguration clientConfiguration = ClientConfiguration.newBuilder()
                .setEndpoints(endpoints)
                .build();
        String tag = "*";
        FilterExpression filterExpression = new FilterExpression(tag, FilterExpressionType.TAG);
        String consumerGroup = "testGroup";
        String topic = "first";
        PushConsumer pushConsumer = provider.newPushConsumerBuilder()
                .setClientConfiguration(clientConfiguration)
                .setConsumerGroup(consumerGroup)
                .setSubscriptionExpressions(Collections.singletonMap(topic, filterExpression))
                .setMessageListener(messageView -> {
                    System.out.println(messageView.getMessageId());
                    ByteBuffer body = messageView.getBody();
                    byte[] bytes = new byte[body.remaining()];
                    body.get(bytes);
                    String content = new String(bytes, StandardCharsets.UTF_8);
                    System.out.println("Received message: " + content);
                    return ConsumeResult.SUCCESS;
                })
                .build();
        Thread.sleep(Long.MAX_VALUE);
        // pushConsumer.close();
    }
相关推荐
CCblandy4 小时前
HTTP 长连接 3 类故障实测:[WinError 10053]、99 个 TIME_WAIT、69 次多余握手,4 种对策怎么选
后端·python·网络协议·http·云原生·性能优化·架构
false_or_true5 小时前
一次由 tcp_tw_recycle 引发的“灵异”故障排查:基于双网闸架构的踩坑记
网络·tcp/ip·架构
滑翔的企鹅5 小时前
从用户需求看 CMS:同一份内容如何服务网页、APP、搜索与 AI?
架构
姜鱼问生6 小时前
Docker Volume 备份与恢复实战:不停机迁移数据
后端·算法·架构
姜鱼问生6 小时前
服务器磁盘满了?从告警到清理的完整排查
后端·算法·架构
JAVA_AI人工智能项目实战7 小时前
Agent核心架构(四层架构、ReAct、OTAC、自主决策、Multi-Agent)
人工智能·语言模型·自然语言处理·架构
一心同学7 小时前
Hermes架构拆解之Environment
架构·environment·agent·hermes
硅基手札8 小时前
【I2C 技术系列 08】I2C 控制器寄存器与 IP 架构
驱动开发·stm32·单片机·嵌入式硬件·mcu·架构·计算机外设
代码方舟9 小时前
零信任架构实战:基于天远贷前风险报告构建自动化消费信贷资质预审网关
人工智能·架构·自动化
m0_587383009 小时前
无人自助拼豆系统从需求分析到落地部署全流程实战开发指南
java·经验分享·后端·struts·小程序·架构·需求分析