我正在开发一个Spring应用程序,它接收来自SQS的消息,如本文https://aws.amazon.com/blogs/developer/using-amazon-sqs-with-spring-boot-and-spring-jms/所述
当我在localhost:8081/health上访问内置的Spring健康端点时,我希望看到一些关于JMS的信息,因为弹簧启动文件说“在适当的时候”配置了一些自动配置的健康指示符,其中之一就是JMS。相反,我只看到状态和磁盘空间{"status":"UP","diskSpace":{"status":"UP","total":31572619264,"free":24611381248,"threshold":10485760}}
有人知道为什么我们在健康端点上看不到任何关于JMS的信息吗?应用程序可以很好地读取SQS,但是由于它是在Kubernetes中托管的,所以我想添加一个就绪/活性探测,并在检查中包含JMS。
有关使用@EnableJms的JMS的信息,如下所示
import javax.jms.Session;
import com.amazon.sqs.javamessaging.SQSConnectionFactory;
import com.amazonaws.auth.AWSCredentialsProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.aws.core.region.RegionProvider;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.annotation.EnableJms;
import org.springframework.jms.config.DefaultJmsListenerContainerFactory;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.support.destination.DynamicDestinationResolver;
@Configuration
@EnableJms
public class JmsConfig {
private static final Logger LOGGER = LoggerFactory.getLogger(JmsConfig.class);
private static final String LOWER_UPPER_CONCURRENCY = "3-10";
private final SQSConnectionFactory connectionFactory;
public JmsConfig(RegionProvider regionProvider, AWSCredentialsProvider awsCredentialsProvider) {
this.connectionFactory = SQSConnectionFactory.builder()
.withRegion(regionProvider.getRegion())
.withAWSCredentialsProvider(awsCredentialsProvider)
.build();
LOGGER.info("Loading JmsConfig");
}
@Bean
public DefaultJmsListenerContainerFactory jmsListenerContainerFactory() {
DefaultJmsListenerContainerFactory factory =
new DefaultJmsListenerContainerFactory();
factory.setConnectionFactory(this.connectionFactory);
factory.setDestinationResolver(new DynamicDestinationResolver());
factory.setConcurrency(LOWER_UPPER_CONCURRENCY);
factory.setSessionAcknowledgeMode(Session.CLIENT_ACKNOWLEDGE);
return factory;
}
@Bean
public JmsTemplate defaultJmsTemplate() {
return new JmsTemplate(this.connectionFactory);
}
}然后,我们还有一个带有@JmsListener(destination = "${sqs.input.queue}")注释的方法。
编辑:注意,我已经尝试将以下内容添加到application.properties中
management.health.defaults.enabled=true
management.health.jms.enabled=true
endpoints.health.sensitive=false谢谢,莉安。
发布于 2017-09-05 12:40:20
结果是,现在将连接工厂公开为bean将导致健康响应中的JMS部分。
因此,通过将代码更改为
@Configuration
@EnableJms
public class JmsConfig {
private static final Logger LOGGER = LoggerFactory.getLogger(JmsConfig.class);
private static final String LOWER_UPPER_CONCURRENCY = "3-10";
public JmsConfig() {
LOGGER.info("Loading JmsConfig");
}
@Bean
public DefaultJmsListenerContainerFactory jmsListenerContainerFactory(SQSConnectionFactory connectionFactory) {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
factory.setDestinationResolver(new DynamicDestinationResolver());
factory.setConcurrency(LOWER_UPPER_CONCURRENCY);
factory.setSessionAcknowledgeMode(Session.CLIENT_ACKNOWLEDGE);
return factory;
}
@Bean
public SQSConnectionFactory sqsConnectionFactory(RegionProvider regionProvider, AWSCredentialsProvider awsCredentialsProvider) {
return SQSConnectionFactory.builder()
.withRegion(regionProvider.getRegion())
.withAWSCredentialsProvider(awsCredentialsProvider)
.build();
}
@Bean
public JmsTemplate defaultJmsTemplate(SQSConnectionFactory connectionFactory) {
return new JmsTemplate(connectionFactory);
}
}健康端点响应如下所示
{
"status": "UP",
"jms": {
"status": "UP",
"provider": "Amazon"
},
"diskSpace": {
"status": "UP",
"total": 249779191808,
"free": 165159432192,
"threshold": 10485760
}
}在看到JmsHealthIndicator的构造函数后,一位同事预感到连接工厂是不可访问的。
发布于 2017-09-05 11:19:09
我认为您可能需要向您的application.properties文件添加进一步的属性:
management.security.enabled=false根据文件:
默认情况下,所有敏感的HTTP端点都是安全的,因此只有具有执行器角色的用户才能访问它们。安全性使用标准的HttpServletRequest.isUserInRole方法强制执行。 如果您在防火墙后部署应用程序,您可能更希望您的所有执行器端点都可以被访问,而不需要身份验证。您可以通过更改management.security.enabled属性来做到这一点。
在这里可以看到更多关于这个的信息:https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-monitoring.html
https://stackoverflow.com/questions/46051652
复制相似问题