全部产品

单元化开发

本文介绍如何设置 LDC 单元化相关参数。

说明

该功能仅适用于支持 LDC 单元化架构的环境。

SOFABoot 生产者

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import io.openmessaging.api.OMS;
import io.openmessaging.api.Producer;
import java.util.Properties;

@Configuration
public class ProducerClient {
    @Autowired
    Producer producer;

    @Bean(initMethod = "start", destroyMethod = "shutdown")
    public Producer buildProducer() {
        Properties properties = new Properties();
        // sofaboot will pass this properties by system property, if not, you can manually set it
        //        properties.setProperty(PropertyKeyConst.LDC, "true"); // -Dzmode=true
        //        properties.setProperty(PropertyKeyConst.CELL, "RZXX"); // -Dcom.alipay.ldc.zone=RZ00B
        //        properties.setProperty(PropertyKeyConst.INSTANCE_ID, "XXX"); // -Dcom.alipay.instanceid=XXX
        //        properties.setProperty(PropertyKeyConst.DATA_CENTER, "XXX"); // -Dcom.alipay.ldc.datacenter=XXX
        //        properties.setProperty(PropertyKeyConst.ENDPOINT, "acvip://1.2.X.X"); // -Dcom.antcloud.antvip.endpoint=1.2.X.X -Dcom.alipay.env=shared
        //        properties.setProperty(PropertyKeyConst.ACCESS_KEY, "XXX"); // -Dcom.antcloud.mw.access=XXX
        //        properties.setProperty(PropertyKeyConst.SECRET_KEY, "XXX"); // -Dcom.antcloud.mw.secret=XXX
        properties.setProperty(PropertyKeyConst.GROUP_ID, "XXXX");
        Producer p = OMS.builder().driver("sofamq").build().createProducer(properties);
        return producer;
    }

    public void send() {
        Message message = new Message("TP_XXX", "TAGXXX", "body".getBytes());
        // 如果需要路由到 RZONE,需要设置 UID
        message.putUserProperties(UserPropKey.CELL_UID, "XX");
        SendResult sendResult = producer.send(message);
    }
}

SOFABoot 消费者

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import io.openmessaging.api.OMS;
import io.openmessaging.api.Producer;
import java.util.Properties;

@Configuration
public class ConsumerClient {
    @Bean(initMethod = "start", destroyMethod = "shutdown")
    public Consumer buildConsumer() {
        Properties properties = new Properties();
        // sofaboot will pass this properties by system property, if not, you can manually set it
        //        properties.setProperty(PropertyKeyConst.LDC, "true"); // -Dzmode=true
        //        properties.setProperty(PropertyKeyConst.CELL, "RZXX"); // -Dcom.alipay.ldc.zone=RZ00B
        //        properties.setProperty(PropertyKeyConst.INSTANCE_ID, "XXX"); // -Dcom.alipay.instanceid=XXX
        //        properties.setProperty(PropertyKeyConst.DATA_CENTER, "XXX"); // -Dcom.alipay.ldc.datacenter=XXX
        //        properties.setProperty(PropertyKeyConst.ENDPOINT, "acvip://1.2.X.X"); // -Dcom.antcloud.antvip.endpoint=1.2.X.X -Dcom.alipay.env=shared
        //        properties.setProperty(PropertyKeyConst.ACCESS_KEY, "XXX"); // -Dcom.antcloud.mw.access=XXX
        //        properties.setProperty(PropertyKeyConst.SECRET_KEY, "XXX"); // -Dcom.antcloud.mw.secret=XXX
        properties.setProperty(PropertyKeyConst.GROUP_ID, "XXXX");
        properties.setProperty(PropertyKeyConst.LDC_SUB_MODE, LdcSubMode.DEFAULT.name());
        Consumer p = OMS.builder().driver("sofamq").build().createConsumer(properties);
        consumer.subscribe("TP_XXX", "TAGXXX", messageListener);
        return consumer;
    }

}

其中订阅模式 LDC_SUB_MODE 包括:

  • DEFAULT:不做任何消息过滤。

  • LOCAL:只消费本 CELL 发出的消息。

  • RZONE:只在 RZONE 启动消费端,并且只消费目标 RZONE CELL 为本 CELL 的消息。需要在管控台 > 消息路由 中配置目标单元 RZONE 的消息路由。

  • GZONE:只在 GZONE 启动消费端,并且只消费目标 GZONE CELL 为本 CELL 的消息。需要在管控台 > 消息路由 中配置目标单元 GZONE 的消息路由。

  • CZONE:只在 CZONE 启动消费端,并且只消费目标 CZONE CELL 为本 CELL 的消息。需要在管控台 > 消息路由 中配置目标单元 GZONE 的消息路由。

消息路由