You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot中如何在Server实例禁用@SqsListener,仅在Worker实例运行?

解决方法

有几种简单直接的方式可以实现只在Worker实例中启用@SqsListener,Server实例禁用:

方法1:用配置属性控制Bean加载

把监听器逻辑放到单独的组件类中,通过@ConditionalOnProperty注解根据配置属性决定是否加载这个Bean:

@Component
@ConditionalOnProperty(name = "sqs.worker.enabled", havingValue = "true", matchIfMissing = false)
public class SqsMessageListener {

    private static final Logger log = LoggerFactory.getLogger(SqsMessageListener.class);

    @SqsListener("queue_name")
    public void loadMessagesFromQueue(Object message) {
        log.info("inside loadMessagesFromQueue");
        log.info("Queue Messages: " + message);
    }
}

然后在实例的配置文件里设置:

  • Worker实例:sqs.worker.enabled=true
  • Server实例:sqs.worker.enabled=false(或者不配置这个属性,因为matchIfMissing=false会默认不加载)

方法2:用Spring Profiles区分实例角色

给监听器组件指定专属的profile,只有激活该profile时才会创建这个Bean:

@Component
@Profile("worker")
public class SqsMessageListener {

    private static final Logger log = LoggerFactory.getLogger(SqsMessageListener.class);

    @SqsListener("queue_name")
    public void loadMessagesFromQueue(Object message) {
        log.info("inside loadMessagesFromQueue");
        log.info("Queue Messages: " + message);
    }
}

启动实例时通过参数指定profile:

  • Worker实例启动参数:--spring.profiles.active=worker
  • Server实例直接启动(不指定worker profile,默认不会加载这个监听器Bean)

这两种方法都能精准控制监听器的启用范围,根据你的部署习惯选择即可。

内容的提问来源于stack exchange,提问作者akhil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 06:15:32