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();
    }
相关推荐
ting945200018 小时前
深度拆解Enter Pro AI原生开发平台:从底层架构到企业级落地技术实践
人工智能·架构·ai-native
这个DBA有点耶19 小时前
数据库集群与分布式架构:三条技术路线对比、金仓KES RAC实测数据与决策框架
数据库·程序员·架构
这个DBA有点耶21 小时前
InnoDB页结构深入:页分裂、页合并、填充因子——B+树底层机制全解析
数据库·mysql·架构
Dawson Zhu21 小时前
大模型记忆系统设计:分层架构与关键技术解析
人工智能·语言模型·架构·aigc·agi
Dawson Zhu1 天前
大模型预训练为何普遍单轮遍历?——从 Scaling Laws、数据重复到灾难性遗忘的技术解析
人工智能·语言模型·架构·aigc·agi
烈风逍遥1 天前
第五篇:通用 LLM 流式对话:前后端联接的完整实现
前端·后端·架构
骑着蜗牛撵大象3271 天前
告别内存泄漏:LLMManager架构设计与智能指针在AI SDK中的智慧选型
c++·ai·架构
万联WANFLOW1 天前
网络排障:如何从延迟、丢包、带宽定位海外访问异常
网络·架构·业界资讯
志栋智能1 天前
集成是关键:让巡检超自动化融入现有工具链
运维·服务器·数据库·架构·自动化
Pioneer000011 天前
我用 Redis + 网关做多模型 API 路由:缓存命中率 95%+ 的工程实践
人工智能·redis·后端·缓存·性能优化·架构