使用 SOFAStack 快速构建微服务
介绍
金融分布式架构 SOFAStack™(Scalable Open Financial Architecture Stack)是构建金融级云原生架构的应用平台,本实验基于 SOFAStack 快速构建一个微服务,主要包括以下几个部分:
- 使用 SOFABoot + SOFARPC 发布服务
- 使用 SOFABoot + SOFARPC 调用服务
- 通过 ZipKin 查看 SOFATracer 上报的 Tracer 信息
架构图
SOFAStack微服务
sofa-registry部署注册中心
SOFARegistry 是一个生产级、高时效、高可用的服务注册中心。
MacBook:registry-integration$ pwd /Users/xx/java_tools/sofa-registry/registry-integration sh bin/startup.sh
部署Zipkin
MacBook:zipkin$ pwd /Users/xx/java_tools/zipkin sh startup.sh 502 28369 28317 0 8:24PM ttys003 0:00.01 /usr/bin/java -jar zipkin.jar 502 28371 28317 0 8:24PM ttys003 0:00.00 grep zipkin.jar
启动SOFARPC服务发布者
balance-mng

@Service
@SofaService(interfaceType = MengkaFacade.class, uniqueId = "${service.unique.id}", bindings = { @SofaServiceBinding(bindingType = "bolt") })
public class MengkaImpl implements MengkaFacade {
@Override
public String getTime() {
return "[Just for test.."+TimeUtil.toDate(new Date(),TimeUtil.FORMAT_YYYY_MM_DD_HH_MM_SS);
}
}
启动SOFARPC服务调用者
stock-mng

@SofaReference(interfaceType = MengkaFacade.class, uniqueId = "${service.unique.id}", binding = @SofaReferenceBinding(bindingType = "bolt"))
private MengkaFacade mengkaFacade;
发起订购商品操作
http://localhost:8080/

String time = mengkaFacade.getTime();
。。
LOGGER.info("purchase begin ... ");
//生成订单
stockMngFacade.createOrder(userName, productCode, count);
//扣减库存
stockMngFacade.minusStockCount(userName, productCode, count);
//扣减账户余额
balanceMngFacade.minusBalance(userName, productPrice.multiply(new BigDecimal(count)));
LOGGER.info("purchase end");
查看zipkin

【生成订单】

@Insert("insert into order_tb (user_name, product_code, count) values (#{userName}, #{productCode}, #{count})")
int createOrder(@Param("userName") String userName, @Param("productCode") String productCode, @Param("count") int count);
【扣减库存】

@Update("update stock_tb set count=count - #{count} where product_code=#{productCode} and user_name=#{userName}")
int minusStockCount(@Param("userName") String userName, @Param("productCode") String productCode,
@Param("count") int count);
【扣减账户余额】

@Mapper
public interface BalanceMngMapper {
@Update("update balance_tb set balance = balance - #{amount} where user_name = #{userName}")
void minusBalance(@Param("userName") String userName, @Param("amount") BigDecimal amount);
}
参考文档
[1]: https://github.com/sofastack-guides/kc-sofastack-demo [2]: https://www.sofastack.tech/projects/sofa-registry/server-quick-start/
浙公网安备 33010602011771号