使用 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

http://localhost:9411/

 

【生成订单】

 

 

@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/

  

posted on 2021-11-11 13:59  rabbit-xf  阅读(638)  评论(0)    收藏  举报