全部产品
云市场

单元化开发(仅专有云)

更新时间:2020-04-29 16:56:12

说明:该功能仅适用于专有云开启了 LDC 单元化功能的用户。

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

SOFABoot 生产者

  1. import org.springframework.beans.factory.annotation.Autowired;
  2. import org.springframework.context.annotation.Bean;
  3. import org.springframework.context.annotation.Configuration;
  4. import io.openmessaging.api.OMS;
  5. import io.openmessaging.api.Producer;
  6. import java.util.Properties;
  7. @Configuration
  8. public class ProducerClient {
  9. @Autowired
  10. Producer producer;
  11. @Bean(initMethod = "start", destroyMethod = "shutdown")
  12. public Producer buildProducer() {
  13. Properties properties = new Properties();
  14. // sofaboot will pass this properties by system property, if not, you can manually set it
  15. // properties.setProperty(PropertyKeyConst.LDC, "true"); // -Dzmode=true
  16. // properties.setProperty(PropertyKeyConst.CELL, "RZXX"); // -Dcom.alipay.ldc.zone=RZ00B
  17. // properties.setProperty(PropertyKeyConst.INSTANCE_ID, "XXX"); // -Dcom.alipay.instanceid=XXX
  18. // properties.setProperty(PropertyKeyConst.DATA_CENTER, "XXX"); // -Dcom.alipay.ldc.datacenter=XXX
  19. // properties.setProperty(PropertyKeyConst.ENDPOINT, "acvip://1.2.X.X"); // -Dcom.antcloud.antvip.endpoint=1.2.X.X -Dcom.alipay.env=shared
  20. // properties.setProperty(PropertyKeyConst.ACCESS_KEY, "XXX"); // -Dcom.antcloud.mw.access=XXX
  21. // properties.setProperty(PropertyKeyConst.SECRET_KEY, "XXX"); // -Dcom.antcloud.mw.secret=XXX
  22. properties.setProperty(PropertyKeyConst.GROUP_ID, "XXXX");
  23. Producer p = OMS.builder().driver("sofamq").build().createProducer(properties);
  24. return producer;
  25. }
  26. public void send() {
  27. Message message = new Message("TP_XXX", "TAGXXX", "body".getBytes());
  28. // 如果需要路由到 RZONE,需要设置 UID
  29. message.putUserProperties(UserPropKey.CELL_UID, "XX");
  30. SendResult sendResult = producer.send(message);
  31. }
  32. }

SOFABoot 消费者

  1. import org.springframework.beans.factory.annotation.Autowired;
  2. import org.springframework.context.annotation.Bean;
  3. import org.springframework.context.annotation.Configuration;
  4. import io.openmessaging.api.OMS;
  5. import io.openmessaging.api.Producer;
  6. import java.util.Properties;
  7. @Configuration
  8. public class ConsumerClient {
  9. @Bean(initMethod = "start", destroyMethod = "shutdown")
  10. public Consumer buildConsumer() {
  11. Properties properties = new Properties();
  12. // sofaboot will pass this properties by system property, if not, you can manually set it
  13. // properties.setProperty(PropertyKeyConst.LDC, "true"); // -Dzmode=true
  14. // properties.setProperty(PropertyKeyConst.CELL, "RZXX"); // -Dcom.alipay.ldc.zone=RZ00B
  15. // properties.setProperty(PropertyKeyConst.INSTANCE_ID, "XXX"); // -Dcom.alipay.instanceid=XXX
  16. // properties.setProperty(PropertyKeyConst.DATA_CENTER, "XXX"); // -Dcom.alipay.ldc.datacenter=XXX
  17. // properties.setProperty(PropertyKeyConst.ENDPOINT, "acvip://1.2.X.X"); // -Dcom.antcloud.antvip.endpoint=1.2.X.X -Dcom.alipay.env=shared
  18. // properties.setProperty(PropertyKeyConst.ACCESS_KEY, "XXX"); // -Dcom.antcloud.mw.access=XXX
  19. // properties.setProperty(PropertyKeyConst.SECRET_KEY, "XXX"); // -Dcom.antcloud.mw.secret=XXX
  20. properties.setProperty(PropertyKeyConst.GROUP_ID, "XXXX");
  21. properties.setProperty(PropertyKeyConst.LDC_SUB_MODE, LdcSubMode.DEFAULT.name());
  22. Consumer p = OMS.builder().driver("sofamq").build().createConsumer(properties);
  23. consumer.subscribe("TP_XXX", "TAGXXX", messageListener);
  24. return consumer;
  25. }
  26. }

其中订阅模式 LDC_SUB_MODE 包括:

  • DEFAULT:不做任何消息过滤。
  • LOCAL:只消费本 CELL 发出的消息。
  • RZONE:只在 RZONE 启动消费端,并且只消费目标 RZONE CELL 为本 CELL 的消息。需要在管控台 > 消息路由 中配置目标单元 RZONE 的消息路由。
  • GZONE:只在 GZONE 启动消费端,并且只消费目标 GZONE CELL 为本 CELL 的消息。需要在管控台 > 消息路由 中配置目标单元 GZONE 的消息路由。
  • CZONE:只在 CZONE 启动消费端,并且只消费目标 CZONE CELL 为本 CELL 的消息。需要在管控台 > 消息路由 中配置目标单元 GZONE 的消息路由。

消息路由