云发布/订阅接收器中未接收到消息

时间:2019-07-17 11:00:38

标签: java spring-boot google-cloud-platform google-cloud-pubsub

我有一个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!

1 个答案:

答案 0 :(得分:0)

代码没有变化,但是我能够使其与降级的google pub / sub maven库一起使用。

<dependency>
            <groupId>com.google.cloud</groupId>
            <artifactId>google-cloud-pubsub</artifactId>
            <version>1.56.0</version>
</dependency>

现在,它可以像给定主题上的所有消息一样正常工作。 希望它能对某人有所帮助。