当前位置: 首页 > 知识库问答 >
问题:

Azure服务总线-Spring启动禁用autostart(com.microsoft.Azure:Azure servicebusSpring启动启动程序)

呼延晋
2023-03-14

我有下面的实现来使用Spring Boot应用程序使用来自Azure Service Bus的消息,但是我希望能够控制ServiceBusConsumer使用Spring Boot profile属性自动开始侦听主题

在应用程序中类似这样的内容。亚马尔

 servicebus.consumer.enable=false

它应该禁止ServiceBusConsumer侦听主题,并且我应该能够使用RESTAPI启动ServiceBusConsumer-例如:/api/servicebus/consumer/start?

import com.microsoft.azure.servicebus.ExceptionPhase;
import com.microsoft.azure.servicebus.IMessage;
import com.microsoft.azure.servicebus.IMessageHandler;
import com.microsoft.azure.servicebus.ISubscriptionClient;
import lombok.extern.log4j.Log4j2;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.event.EventListener;
import org.springframework.core.Ordered;
import org.springframework.stereotype.Component;

import java.util.concurrent.CompletableFuture;

@Log4j2
@Component
class ServiceBusConsumer implements Ordered {

    private final ISubscriptionClient iSubscriptionClient;

    ServiceBusConsumer(ISubscriptionClient isc) {
        this.iSubscriptionClient = isc;
    }

    @EventListener(ApplicationReadyEvent.class)
    public void consume() throws Exception {

        this.iSubscriptionClient.registerMessageHandler(new IMessageHandler() {

            @Override
            public CompletableFuture<Void> onMessageAsync(IMessage message) {
                log.info("received message " + new String(message.getBody()) + " with body ID " + message.getMessageId());
                return CompletableFuture.completedFuture(null);
            }

            @Override
            public void notifyException(Throwable exception, ExceptionPhase phase) {
                log.error("eeks!", exception);
            }
        });

    }

    @Override
    public int getOrder() {
        return Ordered.HIGHEST_PRECEDENCE;
    }
}

共有1个答案

邓驰
2023-03-14

通过像这样添加@ConditionalOnProperty注释,可以有条件地创建ServiceBusConsumerbean,以确保仅在servicebus时创建bean。消费者enabled=true

@Log4j2
@Component
@ConditionalOnProperty(prefix = "servicebus.consumer", name = "enabled") 
class ServiceBusConsumer implements Ordered {
...
}
 类似资料:
  • 服务总线网关未启动。 首先,我尝试完全卸载所有Azure/Fabric/Service Bus类型的SDK和安装。我已经从头安装了和。 删除所有与服务总线相关的数据库后,我将启动服务总线配置向导,并开始使用自定义设置启动一个新场。 除了添加我自己的证书,当然还有输入我的密码之外,我保留所有的默认设置。 单击“开始”后,服务总线配置向导最终将卡在进程中: null 谢谢

  • 当我的应用程序启动时,将创建一个executor服务(在java.util.concurrent中使用Executors.NewFixedThreadPool(maxThreadNum))对象。当请求到来时,executor服务将创建线程来处理它们。 当应用程序启动时,它将在executorService池中创建200个线程。 只是想知道当应用程序启动时,这是一种正确的创建线程的方法吗?还是有更好

  • 我已将spring-boot应用程序部署到IIS/嵌入式tomcat,作为一个azure应用程序服务。当应用程序服务启动时,应用程序日志显示同一实例大约每10分钟发生一次重新启动(新的pid)。90分钟后,它将最终成功部署。我从嵌入的tomcat日志和org.springframework日志中看不到任何问题,但有时它可能在2分钟内开始。 我还可以在哪里查找启动错误,有没有办法增加应用服务启动时间

  • 问题内容: 从我在Stack Exchange和其他地方看到的所有内容中,我已经正确设置了所有内容,可以在启动Android OS时启动IntentService。不幸的是,它没有在启动时启动,并且我没有收到任何错误。也许专家可以帮忙… 表现: 用于启动的BroadcastReceiver: 更新:我尝试了下面的几乎所有建议,并;在处理程序中添加了日志记录,但从未记录过任何内容。因此,它甚至还没有

  • 我正在使用Spring boot2.2.9。RELEASE和Spring Cloud Hoxton。SR7。我正在使用Spring Cloud Bus向docker群堆栈中的所有容器发出信号,并且当在生产环境中使用正在运行的RabbitMQ集群部署时,事情会完美运行! 我通过spring cloud starter总线amqp spring Boot starter使用RabbitMQ实现。我们偶

  • 我很久以前做了一些自定义systemd服务,都有相同的配置(当然ExecStart除外) 这种配置已经运行了很多年,从18.04版LTS开始,我已经启动并运行了ubuntu,但是现在看起来有些systemd服务根本没有启动,配置如下(myapp.service): 服务已启用: 如果在重新启动后执行“systemctl status myapp”: 如果我在重新启动后执行“Journal alct