当前位置: 首页 > news >正文

揭阳网站制作建设书籍网站建设规划书

揭阳网站制作建设,书籍网站建设规划书,房山建站公司,做一个网站需要多久场景与技术栈 场景:电商系统中的订单创建流程,涉及订单服务(Order Service)、库存服务(Inventory Service)、支付服务(Payment Service)。 技术栈: Java 11 Spring Bo…

场景与技术栈

场景:电商系统中的订单创建流程,涉及订单服务(Order Service)、库存服务(Inventory Service)、支付服务(Payment Service)。

技术栈:

  • Java 11

  • Spring Boot 2.7.0

  • MySQL 8.0

  • RabbitMQ

项目结构与组件
  • order-service

  • inventory-service

  • payment-service

  • saga-coordinator

代码实现

1. Saga Coordinator

@SpringBootApplicationpublic class SagaCoordinatorApplication {    public static void main(String[] args) {        SpringApplication.run(SagaCoordinatorApplication.class, args);    }}@Service@RequiredArgsConstructorpublic class SagaService {    private final SagaOrderService sagaOrderService;    private final SagaInventoryService sagaInventoryService;    private final SagaPaymentService sagaPaymentService;    private final SagaTransactionRepository sagaTransactionRepository;    public void placeOrder(Long orderId, Long productId, int quantity, double amount) throws ExecutionException, InterruptedException {        SagaTransaction transaction = new SagaTransaction();        transaction.setOrderId(orderId);        transaction.setProductId(productId);        transaction.setQuantity(quantity);        transaction.setAmount(amount);        transaction.setStatus(SagaTransaction.Status.INITIATED);        sagaTransactionRepository.save(transaction);        CompletableFuture.runAsync(() -> sagaOrderService.createOrder(transaction))            .thenRunAsync(() -> sagaInventoryService.decreaseInventory(transaction))            .thenRunAsync(() -> sagaPaymentService.charge(transaction))            .exceptionally(ex -> {                rollback(transaction);                throw new RuntimeException("Saga failed", ex);            });    }    private void rollback(SagaTransaction transaction) {        CompletableFuture.runAsync(() -> sagaPaymentService.refund(transaction))            .thenRunAsync(() -> sagaInventoryService.increaseInventory(transaction))            .thenRunAsync(() -> sagaOrderService.cancelOrder(transaction))            .exceptionally(ex -> {                transaction.setStatus(SagaTransaction.Status.FAILED);                sagaTransactionRepository.save(transaction);                throw new RuntimeException("Rollback failed", ex);            });    }}

2. SagaOrderService

@Servicepublic class SagaOrderService {    private final OrderService orderService;    private final RabbitTemplate rabbitTemplate;    @Autowired    public SagaOrderService(OrderService orderService, RabbitTemplate rabbitTemplate) {        this.orderService = orderService;        this.rabbitTemplate = rabbitTemplate;    }    public void createOrder(SagaTransaction transaction) {        // 创建订单逻辑        // ...        // 发送创建订单完成的消息        rabbitTemplate.convertAndSend("order.create", transaction);    }    public void cancelOrder(SagaTransaction transaction) {        // 取消订单逻辑        // ...        // 发送取消订单完成的消息        rabbitTemplate.convertAndSend("order.cancel", transaction);    }}

3. SagaInventoryService

@Servicepublic class SagaInventoryService {    private final InventoryService inventoryService;    private final RabbitTemplate rabbitTemplate;    @Autowired    public SagaInventoryService(InventoryService inventoryService, RabbitTemplate rabbitTemplate) {        this.inventoryService = inventoryService;        this.rabbitTemplate = rabbitTemplate;    }    public void decreaseInventory(SagaTransaction transaction) {        // 扣减库存逻辑        // ...        // 发送扣减库存完成的消息        rabbitTemplate.convertAndSend("inventory.decrease", transaction);    }    public void increaseInventory(SagaTransaction transaction) {        // 增加库存逻辑        // ...        // 发送增加库存完成的消息        rabbitTemplate.convertAndSend("inventory.increase", transaction);    }}

4. SagaPaymentService

@Servicepublic class SagaPaymentService {    private final PaymentService paymentService;    private final RabbitTemplate rabbitTemplate;    @Autowired    public SagaPaymentService(PaymentService paymentService, RabbitTemplate rabbitTemplate) {        this.paymentService = paymentService;        this.rabbitTemplate = rabbitTemplate;    }    public void charge(SagaTransaction transaction) {        // 收款逻辑        // ...        // 发送收款完成的消息        rabbitTemplate.convertAndSend("payment.charge", transaction);    }    public void refund(SagaTransaction transaction) {        // 退款逻辑        // ...        // 发送退款完成的消息        rabbitTemplate.convertAndSend("payment.refund", transaction);    }}
SagaTransaction Entity
@Entitypublic class SagaTransaction {    @Id    @GeneratedValue(strategy = GenerationType.IDENTITY)    private Long id;    private Long orderId;    private Long productId;    private int quantity;    private double amount;    private Status status; // INITIATED, COMPLETED, ROLLING_BACK, ROLLED_BACK, FAILED    // Getters & Setters}
消息队列监听

在每个微服务中,需要添加消息队列的监听器,以便在接收到消息时执行相应的操作。例如,在order-service中:

@Componentpublic class OrderSagaListener {    private final SagaOrderService sagaOrderService;    @Autowired    public OrderSagaListener(SagaOrderService sagaOrderService) {        this.sagaOrderService = sagaOrderService;    }    @RabbitListener(queues = "order.create")    public void handleOrderCreate(SagaTransaction transaction) {        sagaOrderService.createOrder(transaction);    }    @RabbitListener(queues = "order.cancel")    public void handleOrderCancel(SagaTransaction transaction) {        sagaOrderService.cancelOrder(transaction);    }}
额外细节
  • 为确保事务的一致性,可以使用RabbitMQ的发布确认(Publisher Confirms)机制。

  • 每个微服务的数据库事务应该使用@Transactional注解来保证ACID属性。

  • 需要设计失败重试和事务状态检查机制,确保在故障恢复时能够正确地执行补偿操作。

通过上述设计,SAGA模式与RabbitMQ的结合,不仅能够处理跨服务的事务,还能够通过消息队列实现服务解耦和消息的异步处理,提高系统的稳定性和可扩展性。

http://www.yayakq.cn/news/557065/

相关文章:

  • 企业网站建设计入什么科目雄安优秀网站建设电话
  • 用php做网站要用什么软件一句话进入wordpress
  • 如何运营好一个网站网站关键词密度
  • 手机触屏版网站开发域名注册服务网站哪个好
  • 带注册的网站需要多大空间新手做那些网站比较好
  • 化妆品网站建设思路镇江一网推网络技术有限公司
  • 做品牌网站找谁绍兴建设局网站
  • 学生怎样做网站wordpress 获取目录结构
  • 网站群建设调研报告windows搭建wordpress博客
  • 怎么用lofter做网站什么网站可以做长图攻略
  • 百度网站地图模板购物网站建设多少钱
  • 做房地产需要做网站吗做网站的职位叫什么
  • 京东商城网站地址宁波城乡建设网
  • 建一个收费网站 怎么收费服务器活动
  • 尤溪住房和城乡建设局网站湛江h5建站
  • 国外专门用于做网站图片的江苏建设职业技术学院
  • 宁波模板建站多少钱设计师培训班
  • 重生做二次元网站seo诊断分析报告
  • 长沙网站排名优化随州最新消息
  • asp网站只能打开首页黄冈app下载推广介绍
  • 有建设银行信用卡怎么登陆不了网站镇江网站建设方案
  • 如何选择企业网站开发wordpress 网站播放器插件下载
  • 体育视频网站建设公司网站是别人做的如何换logo
  • 东原ARC网站建设公司文登住房与建设局网站
  • iOS开发 隐私政策网站怎么做官方网站建设的重要性
  • 个人可以建购物网站吗seo和sem哪个工资高
  • 做外贸的阿里巴巴网站是哪个好汕头高端网站建设方法
  • 郑州做网站软件30天网站建设
  • 泸州网站开发哪个行业必须做网站
  • wordpress 获取当前位置河源网站建设1993seo