在 GCP PubSub 和 Spring Boot 中捕获发布错误
Posted
技术标签:
【中文标题】在 GCP PubSub 和 Spring Boot 中捕获发布错误【英文标题】:Catching publish errors in GCP PubSub and Spring Boot 【发布时间】:2020-10-13 09:41:26 【问题描述】:我有一个 Spring Boot 应用程序,它需要偶尔将消息发布到 GCP PubSub。我按照 Spring Boot 页面 (https://spring.io/guides/gs/messaging-gcp-pubsub/) 上的说明实现了它,所以我实现了以下配置文件:
@Configuration
public class PubSubConfiguration
@Value("$myprog.pubsub.sms-topic")
private String topic;
@Bean
@ServiceActivator(inputChannel = "pubsubOutputChannel")
public MessageHandler messageSender(PubSubTemplate pubsubTemplate)
return new PubSubMessageHandler(pubsubTemplate, this.topic);
@MessagingGateway(defaultRequestChannel = "pubsubOutputChannel")
public interface PubsubOutboundGateway
void sendToPubsub(String text);
从我的休息控制器,我自动连接消息网关并调用sendToPubsub
:
@RequestMapping("/api/stuff")
@RestController
public class StuffController
PubSubConfiguration.PubsubOutboundGateway messagingGateway;
@Autowired
public StuffController(@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection") PubSubConfiguration.PubsubOutboundGateway messagingGateway)
this.messagingGateway = messagingGateway;
@RequestMapping(method = RequestMethod.POST, path = "/go")
public ResponseEntity<String> send()
messagingGateway.sendToPubsub("TEST");
return new ResponseEntity<>("Ok!", HttpStatus.OK);
这可行,但是由于我们的特殊用例,如果发布失败,我想以错误响应。例如,如果我配置了一个不存在的主题,我想返回 500 错误,而它当前返回 200 并稍后异步抛出异常。有什么方法可以让我在发布时访问未来?
【问题讨论】:
【参考方案1】:Spring Cloud GCP PubSub 实现使用 Spring Integration 框架并依赖它。为此,您的发送到 PubSub 方法必须抛出异常,如 Spring integration documentation 中所述
@MessagingGateway(defaultRequestChannel = "pubsubOutputChannel")
public interface PubsubOutboundGateway
void sendToPubsub(String text) throws MessagingException;
【讨论】:
以上是关于在 GCP PubSub 和 Spring Boot 中捕获发布错误的主要内容,如果未能解决你的问题,请参考以下文章
在 Spring Cloud GCP pubsub 中创建特定于消息通道的线程
使用 GCP pubsub 的 Spring Cloud Stream 消费者的并发设置
Spring Boot GCP:将 PubSub 应用程序部署到 App Engine 标准环境时出现“Google 凭据”异常