博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
聊聊servicecomb-saga的alpha-server
阅读量:6156 次
发布时间:2019-06-21

本文共 3130 字,大约阅读时间需要 10 分钟。

本文主要研究一下servicecomb-saga的alpha-server

启动alpha-server

alpha-server是servicecomb-saga的分布式事务协调中心,采用spring boot开发,可以直接从jar包启动,需要依赖mysql或pg数据库,同时初始化数据。启动命令如下:

java -jar -Dspring.profiles.active=prd \ alpha-server-0.2.0-exec.jar \ --spring.datasource.url=jdbc:postgresql://localhost:5432/postgres \ --spring.datasource.username=postgres \ --spring.datasource.password=postgres复制代码

AlphaConfig

@EntityScan(basePackages = "org.apache.servicecomb.saga.alpha")@Configurationclass AlphaConfig {  private final BlockingQueue
pendingCompensations = new LinkedBlockingQueue<>(); private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); @Value("${alpha.compensation.retry.delay:3000}") private int delay; @Bean Map
> omegaCallbacks() { return new ConcurrentHashMap<>(); } @Bean OmegaCallback omegaCallback(Map
> callbacks) { return new PushBackOmegaCallback(pendingCompensations, new CompositeOmegaCallback(callbacks)); } @Bean TxEventRepository springTxEventRepository(TxEventEnvelopeRepository eventRepo) { return new SpringTxEventRepository(eventRepo); } @Bean CommandRepository springCommandRepository(TxEventEnvelopeRepository eventRepo, CommandEntityRepository commandRepository) { return new SpringCommandRepository(eventRepo, commandRepository); } @Bean TxTimeoutRepository springTxTimeoutRepository(TxTimeoutEntityRepository timeoutRepo) { return new SpringTxTimeoutRepository(timeoutRepo); } @Bean ScheduledExecutorService compensationScheduler() { return scheduler; } @Bean GrpcServerConfig grpcServerConfig() { return new GrpcServerConfig(); } @Bean TxConsistentService txConsistentService( @Value("${alpha.event.pollingInterval:500}") int eventPollingInterval, GrpcServerConfig serverConfig, ScheduledExecutorService scheduler, TxEventRepository eventRepository, CommandRepository commandRepository, TxTimeoutRepository timeoutRepository, OmegaCallback omegaCallback, Map
> omegaCallbacks) { new EventScanner(scheduler, eventRepository, commandRepository, timeoutRepository, omegaCallback, eventPollingInterval).run(); TxConsistentService consistentService = new TxConsistentService(eventRepository); ServerStartable startable = buildGrpc(serverConfig, consistentService, omegaCallbacks); new Thread(startable::start).start(); return consistentService; } private ServerStartable buildGrpc(GrpcServerConfig serverConfig, TxConsistentService txConsistentService, Map
> omegaCallbacks) { return new GrpcStartable(serverConfig, new GrpcTxEventEndpointImpl(txConsistentService, omegaCallbacks)); } @PostConstruct void init() { new PendingTaskRunner(pendingCompensations, delay).run(); } @PreDestroy void shutdown() { scheduler.shutdownNow(); }}复制代码
  • 这里主要是启动grpc server
  • respository部分有SpringCommandRepository、SpringTxEventRepository、SpringTxTimeoutRepository

小结

  • 从整个alpha工程结构来看,相对比较粗糙一点,config、repository等类都没有按包名归类
  • 另外整个工程没有做成spring-boot-starter,不方便使用jar包嵌入进行扩展,有待改进

doc

转载地址:http://stbfa.baihongyu.com/

你可能感兴趣的文章
Kickstart 无人职守安装,终于搞定了。
查看>>
linux开源万岁
查看>>
linux/CentOS6忘记root密码解决办法
查看>>
25个常用的Linux iptables规则
查看>>
集中管理系统--puppet
查看>>
分布式事务最终一致性常用方案
查看>>
Exchange 2013 PowerShell配置文件
查看>>
JavaAPI详解系列(1):String类(1)
查看>>
HTML条件注释判断IE<!--[if IE]><!--[if lt IE 9]>
查看>>
发布和逸出-构造过程中使this引用逸出
查看>>
Oracle执行计划发生过变化的SQL语句脚本
查看>>
使用SanLock建立简单的HA服务
查看>>
发现一个叫阿尔法城的小站(以后此贴为我记录日常常用网址的帖子了)
查看>>
Subversion使用Redmine帐户验证简单应用、高级应用以及优化
查看>>
Javascript Ajax 异步请求
查看>>
DBCP连接池
查看>>
cannot run programing "db2"
查看>>
mysql做主从relay-log问题
查看>>
Docker镜像与容器命令
查看>>
批量删除oracle中以相同类型字母开头的表
查看>>