使用 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
【生成订单】
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/ |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗