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

观察者模式在Java微服务间的使用

一.、使用RabbitMQ来实现

(1) 生产者(订单微服务)

import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Service;

@Service
public class OrderService {
    private final RabbitTemplate rabbitTemplate;

    public OrderService(RabbitTemplate rabbitTemplate) {
        this.rabbitTemplate = rabbitTemplate;
    }

    public void createOrder(Long orderId) {
        // 创建订单逻辑
        System.out.println("订单创建成功: " + orderId);

        // 发送消息到 RabbitMQ
        rabbitTemplate.convertAndSend("order.exchange", "order.created", orderId);
    }
}

(2) 消费者(通知微服务)

import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@Component
public class NotificationService {

    @RabbitListener(queues = "order.queue")
    public void handleOrderCreated(Long orderId) {
        System.out.println("【通知服务】订单 " + orderId + " 创建成功,发送通知!");
    }
}

(3) 配置 RabbitMQ 交换机和队列

import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RabbitMQConfig {

    @Bean
    public DirectExchange orderExchange() {
        return new DirectExchange("order.exchange");
    }

    @Bean
    public Queue orderQueue() {
        return new Queue("order.queue");
    }

    @Bean
    public Binding binding(Queue orderQueue, DirectExchange orderExchange) {
        return BindingBuilder.bind(orderQueue).to(orderExchange).with("order.created");
    }
}

二. 使用 Spring Cloud Stream

Spring Cloud Stream 结合 Kafka 或 RabbitMQ,可以简化微服务间的事件驱动架构。

(1) 生产者

import org.springframework.cloud.stream.function.StreamBridge;
import org.springframework.stereotype.Service;

@Service
public class OrderService {
    private final StreamBridge streamBridge;

    public OrderService(StreamBridge streamBridge) {
        this.streamBridge = streamBridge;
    }

    public void createOrder(Long orderId) {
        System.out.println("订单创建成功: " + orderId);

        // 发送事件
        streamBridge.send("orderCreated-out-0", orderId);
    }
}

(2) 消费者

import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Service;
import java.util.function.Consumer;

@Service
public class NotificationService {

    @Bean
    public Consumer<Long> orderCreated() {
        return orderId -> System.out.println("【通知服务】订单 " + orderId + " 创建成功,发送通知!");
    }
}

(3) 配置 application.yml

spring:
  cloud:
    stream:
      bindings:
        orderCreated-out-0:
          destination: order-events
        orderCreated-in-0:
          destination: order-events
      defaultBinder: rabbit

相关文章:

  • 学习大模型需要具备哪些技术、知识和基础
  • 【蓝桥杯速成】| 17.完全背包(一维easy版)
  • 题解:P8667 [蓝桥杯 2018 省 B] 递增三元组 (暴力+二分)
  • DeepSeek原生稀疏注意力(Native Sparse Attention, NSA)算法介绍
  • 【SpringCloud】LoadBalance-负载均衡
  • html处理Base文件流
  • 【C++项目】从零实现RPC框架「三」:项⽬抽象层实现
  • 动手实现docker全过程
  • python求解非线性方程组
  • 蓝桥杯——统计子矩阵
  • 设计模式学习(1)
  • 顺据结构(C\C++)——双向链表
  • 【Qt】游戏场景和图元
  • rbpf虚拟机-JIT和解释执行对比
  • 数据处理的两种范式:深入解析OLTP与OLAP系统
  • 自动驾驶实验
  • 13届省赛python A组:10.数的拆分
  • 【Linux】进程间通信(IPC)-- 无名管道、命名管道
  • 请求Header(Request Headers)详解
  • LeetCode算法题(Go语言实现)_22
  • 在家做网站或ps挣钱接活/百度搜索风云排行榜
  • 颍州网站建设/网站推广网络推广
  • 做公司网站的流程/百度指数的数据来源
  • 没有logo可以做网站的设计吗/seo关键词排名优化怎样
  • 开发公司楼盘项目管理费合同/网络推广关键词优化公司
  • 龙岩一中网站/无代码免费web开发平台