前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Cloud Bus在服务之间传递自定义事件(一)

Spring Cloud Bus在服务之间传递自定义事件(一)

原创
作者头像
堕落飞鸟
发布2023-04-16 07:49:27
5920
发布2023-04-16 07:49:27
举报
文章被收录于专栏:飞鸟的专栏

Spring Cloud Bus是Spring Cloud生态系统中的一个组件,用于在分布式系统中传递消息和事件。除了提供消息总线的基本功能之外,它还可以用于在服务之间传递自定义事件。

自定义事件

在Spring Framework中,我们可以使用ApplicationEvent来创建自定义事件。为了演示如何在Spring Cloud Bus中传递自定义事件,我们创建了一个名为MyCustomEvent的自定义事件。代码如下所示:

代码语言:javascript
复制
public class MyCustomEvent extends ApplicationEvent {

    private final String message;

    public MyCustomEvent(Object source, String message) {
        super(source);
        this.message = message;
    }

    public String getMessage() {
        return message;
    }
}

在这个自定义事件中,我们简单地将消息作为一个String类型的属性添加到事件中。

生产者

为了在Spring Cloud Bus中传递自定义事件,我们需要一个生产者应用程序,该应用程序将触发自定义事件并将其发送到Spring Cloud Bus上。在这个示例中,我们将使用Spring Cloud Bus来连接两个应用程序,这两个应用程序都是使用Spring Cloud Config从同一个配置服务器获取它们的配置。我们使用Spring Cloud Config作为我们的配置服务器,因为它已经为我们集成了Spring Cloud Bus。

代码语言:javascript
复制
@SpringBootApplication
@EnableDiscoveryClient
@RestController
public class ProducerApplication {

    private static final Logger LOGGER = LoggerFactory.getLogger(ProducerApplication.class);

    @Autowired
    private ApplicationEventPublisher publisher;

    @Value("${spring.application.name}")
    private String appName;

    @PostMapping("/sendMessage")
    public void sendMessage(@RequestParam String message) {
        LOGGER.info("Sending message: {}", message);
        publisher.publishEvent(new MyCustomEvent(this, message));
    }

    public static void main(String[] args) {
        SpringApplication.run(ProducerApplication.class, args);
    }
}

在这个生产者应用程序中,我们使用ApplicationEventPublisher来发布MyCustomEvent事件。我们定义了一个名为sendMessage的REST API来触发这个事件,该API接收一个名为message的字符串参数。

消费者

现在,我们需要一个消费者应用程序来接收这些自定义事件。在这个示例中,我们将使用Spring Cloud Stream来创建一个名为ConsumerApplication的消费者应用程序。

代码语言:javascript
复制
@SpringBootApplication
@EnableDiscoveryClient
public class ConsumerApplication {

    private static final Logger LOGGER = LoggerFactory.getLogger(ConsumerApplication.class);

    @Value("${spring.application.name}")
    private String appName;

    @StreamListener(target = Sink.INPUT, condition = "headers['type']=='myCustomEvent'")
    public void handleMyCustomEvent(MyCustomEvent event) {
        LOGGER.info("Received MyCustomEvent: {}", event.getMessage());
    }

    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class, args);
    }
}

在这个消费者应用程序中,我们使用@StreamListener注释来监听Spring Cloud Stream通道上的消息。我们定义了一个名为handleMyCustomEvent的方法来处理接收到的MyCustomEvent事件。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 自定义事件
  • 生产者
  • 消费者
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档