我用Spring Cloud Function库创建了一个简单的Google Cloud Function,以便在Pub/Sub消息到达时触发。我遵循了示例函数示例gcp背景。每当一条消息被触发到Pub/Sub时,它就会按预期从Cloud Function中打印出来。
但我想知道如何在Cloud Functon中获取Pub/Sub消息的元数据。谷歌云功能文档称
此元数据可通过传递给的上下文对象访问当函数被调用时。
如何在Spring Cloud Function应用程序中访问此元数据(或上下文对象(?
更新:-版本spring-cloud-function-adapter-gcp:3.1.2
更新2:-我在github中提出了一个问题,并解决了这个问题。感谢Spring Cloud Function团队。
当您使用后台函数时,PubSub消息和上下文将被提取并在PubSub信息中提供。如果您在此处查看PubSub对象;你有发布时间和消息ID嵌入其中。你只需要使用它们!
根据spring cloud功能团队的建议解决了问题。Consumer
函数需要接受类型为Message<PubSubMessage>
而不是PubSubMessage
的参数才能获得Context
对象。
@Bean
public Consumer<Message<PubSubMessage>> pubSubFunction() {
return message -> {
// The PubSubMessage data field arrives as a base-64 encoded string and must be decoded.
// See: https://cloud.google.com/functions/docs/calling/pubsub#event_structure
PubSubMessage payload = message.getPayload();
String decodedMessage = new String(
Base64.getDecoder().decode(message.getPayload().getData()), StandardCharsets.UTF_8);
System.out.println("Hello!!! Received Pub/Sub message with data: " + decodedMessage);
// Print out timestamp and event id
Context ctx = message.getHeaders().get("gcf_context", Context.class);
System.out.println(ctx.eventId());
System.out.println(ctx.timestamp());
};
}
参考:-github问题#695