有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java一次只拉一条消息

我目前面临的问题是,我想实现一个简单的主从模式,在这个模式中,主从通过将所有作业从开始发布到主题来初始化作业队列。每当奴隶们有自由工作能力时,他们就会拉这些工作,拉是通过一次拉一个工作来实现的。示例代码on github中的代码在特定时间提取多条消息

subscriber.startAsync().awaitRunning();
Thread.sleep(params.y());

我不想这样,我只想从队列中提取一条作业消息,让从机完成工作,工作完成后,调用提取方法提取另一条作业消息,但一次只能提取一条。因为我在ExecutorService中执行作业,所以如果线程池已满,我希望确保不提取任何消息。如果有一个作业已完成,而一个线程没有工作,我如何实现拉取一条消息,将该作业填充到我的ExecutorService中,并仅拉取下一条作业消息


共 (1) 个答案

  1. # 1 楼答案

    一次拉取一条消息会被认为是谷歌云发布/订阅的反模式。通过Subscriber Builder指定FlowControlSettings,可以控制发送给工作人员的消息数量。特别是,您可以在FlowControlSettings Builder上调用setMaxOutstandingElementCount,以限制已发送到您提供的MessageReceiver的最大消息数。如果您的每个工作人员都是单独的订户,并且希望一次执行一个操作,那么您甚至可以将这个数字设置为1

    如果需要更精确地控制订阅服务器的pull语义,那么可以直接使用gRPC library's pull method。关于这一方法Serivce APIs Overview有更多信息