随笔 - 28  文章 - 0  评论 - 0  阅读 - 6430

使用 SOFAStack 快速构建微服务

介绍

金融分布式架构 SOFAStack™(Scalable Open Financial Architecture Stack)是构建金融级云原生架构的应用平台,本实验基于 SOFAStack 快速构建一个微服务,主要包括以下几个部分:

  • 使用 SOFABoot + SOFARPC 发布服务
  • 使用 SOFABoot + SOFARPC 调用服务
  • 通过 ZipKin 查看 SOFATracer 上报的 Tracer 信息

 架构图

SOFAStack微服务 

sofa-registry部署注册中心

SOFARegistry 是一个生产级、高时效、高可用的服务注册中心。

1
2
3
4
MacBook:registry-integration$ pwd
/Users/xx/java_tools/sofa-registry/registry-integration
 
sh bin/startup.sh

  

部署Zipkin

1
2
3
4
5
6
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

 

1
2
3
4
5
6
7
8
@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

 

 

1
2
@SofaReference(interfaceType = MengkaFacade.class, uniqueId = "${service.unique.id}", binding = @SofaReferenceBinding(bindingType = "bolt"))
private MengkaFacade mengkaFacade;

  

发起订购商品操作

http://localhost:8080/

 

1
2
3
4
5
6
7
8
9
10
11
12
13
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/

 

【生成订单】

 

 

1
2
@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);

 

【扣减库存】

 

1
2
3
@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);

  

【扣减账户余额】

 

1
2
3
4
5
6
@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   rabbit-xf  阅读(586)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示