我有一个Spring Boot应用程序,在其中我通过在应用程序启动时传递订阅ID来创建订阅者
import com.google.cloud.pubsub.v1.MessageReceiver;
import com.google.cloud.pubsub.v1.Subscriber;
import com.google.pubsub.v1.ProjectSubscriptionName;
...
...
public void startAndWait() {
ProjectSubscriptionName subscriptionName = ProjectSubscriptionName.of(projectName, subscriptionId);
Subscriber subscriber = Subscriber.newBuilder(subscriptionName, receiver).build();
log.log(Level.INFO, "Created Subscriber: " + subscriptionName); // I get this logger message when service starts
subscriber.startAsync();
}
以下是在上述代码中初始化时传递给该订户的接收者代码。
import com.google.cloud.pubsub.v1.AckReplyConsumer;
import com.google.cloud.pubsub.v1.MessageReceiver;
import com.google.pubsub.v1.PubsubMessage;
..
..
@Log
@Component
@Configurable
public class SubMessageReceiver implements MessageReceiver {
..
..
@Override
public void receiveMessage(PubsubMessage message, AckReplyConsumer consumer) {
try {
processMessage(message);
} catch (IOException e) {
log.log(Level.SEVERE, "retrieving message content failed");
} catch (Exception e) {
log.log(Level.SEVERE, "Failed triggering rules");
}
consumer.ack();
}
我尝试过-手动删除并再次创建订阅,手动发布有关该主题的多条消息,并验证这些消息已通过Google Cloud Console上的订阅接收。 唯一的问题是客户端库中的receiveMessage方法永远不会收到消息! 我确认没有其他订阅者使用相同的订阅ID(也没有在其他任何环境下使用) 我验证了消息队列中未包含未经确认的消息是否已满。
我期望上面提到的processMessage方法中打印一些记录器,或者当我在该方法中放置调试器时,只要消息到达,调试器都应在调试指针处停止。
请支持或发表任何想法! TIA!
答案 0 :(得分:0)
代码没有变化,但是我能够使其与降级的google pub / sub maven库一起使用。
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-pubsub</artifactId>
<version>1.56.0</version>
</dependency>
现在,它可以像给定主题上的所有消息一样正常工作。 希望它能对某人有所帮助。