当前位置: 首页 > 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

http://www.dtcms.com/a/102500.html

相关文章:

  • 学习大模型需要具备哪些技术、知识和基础
  • 【蓝桥杯速成】| 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
  • 操作系统的运行机制
  • 运放的噪声计算
  • 同步SVPWM调制策略的初步学习记录
  • 六十天Linux从0到项目搭建(第二十四天)(共享内存)
  • 鸿蒙开发03样式相关介绍(二)
  • 《MOSFET:静电场中的无声刺客》
  • DirectX安装步骤(包含安装包)DirectX详细图文安装教程
  • LangChain 安装与环境搭建,并调用OpenAI与Ollama本地大模型
  • 31天Python入门——第17天:初识面向对象
  • Android设计模式之责任链模式