Apache Pulsar消息传递语义
创始人
2024-09-04 19:00:27
0

在Apache Pulsar中,消息传递语义包括“至少一次”(at least once)和“最多一次”(at most once)语义。

  1. 至少一次(At least once)语义: 在至少一次语义中,消息保证至少会被传递一次。这可以通过设置消息的确认模式为ACKNOWLEDGE或AUTO_ACKNOWLEDGE来实现。

示例代码:

import org.apache.pulsar.client.api.*;
import org.apache.pulsar.client.api.schema.GenericRecord;
import org.apache.pulsar.client.api.schema.GenericSchema;

public class AtLeastOnceExample {
    public static void main(String[] args) throws PulsarClientException {
        String serviceUrl = "pulsar://localhost:6650";
        String topic = "persistent://public/default/my-topic";

        PulsarClient client = PulsarClient.builder()
                .serviceUrl(serviceUrl)
                .build();

        Consumer consumer = client.newConsumer(GenericSchema.of())
                .topic(topic)
                .subscriptionName("my-subscription")
                .subscriptionType(SubscriptionType.Shared)
                .ackTimeout(0, TimeUnit.SECONDS)
                .subscribe();

        while (true) {
            Message message = consumer.receive();
            try {
                System.out.println("Received message: " + message.getValue());
                // 处理消息的逻辑

                consumer.acknowledge(message);
            } catch (Exception e) {
                // 处理异常情况
                consumer.negativeAcknowledge(message);
            }
        }
    }
}
  1. 最多一次(At most once)语义: 在最多一次语义中,消息可能会丢失或重复传递。这可以通过设置消息的确认模式为AUTO_ACKNOWLEDGE或AUTO_ACKNOWLEDGE_ASYNC来实现。

示例代码:

import org.apache.pulsar.client.api.*;
import org.apache.pulsar.client.api.schema.GenericRecord;
import org.apache.pulsar.client.api.schema.GenericSchema;

public class AtMostOnceExample {
    public static void main(String[] args) throws PulsarClientException {
        String serviceUrl = "pulsar://localhost:6650";
        String topic = "persistent://public/default/my-topic";

        PulsarClient client = PulsarClient.builder()
                .serviceUrl(serviceUrl)
                .build();

        Consumer consumer = client.newConsumer(GenericSchema.of())
                .topic(topic)
                .subscriptionName("my-subscription")
                .subscriptionType(SubscriptionType.Shared)
                .ackTimeout(0, TimeUnit.SECONDS)
                .subscribe();

        while (true) {
            Message message = consumer.receive();
            System.out.println("Received message: " + message.getValue());
            // 处理消息的逻辑
        }
    }
}

请注意,以上示例代码仅展示了如何设置消息传递语义,实际使用中还需要根据具体的业务逻辑进行相应的处理和错误处理。

相关内容

热门资讯

一分钟带你了解!丽水都莱破解器... 一分钟带你了解!丽水都莱破解器,wejoker开挂,详细教程(真实有挂);一、丽水都莱破解器有挂的是...
记者发布!湖北休闲辅助,wpk... 您好:湖北休闲辅助这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户的牌特别...
记者揭秘!新道游戏辅助器免费版... 记者揭秘!新道游戏辅助器免费版,wepoker怎么设置房间,力荐教程(有挂讲解);一、新道游戏辅助器...
技术分享!拱趴大菠萝修改器,w... 《技术分享!拱趴大菠萝修改器,wepoker有人用过吗,AI教程(有挂攻略)》 拱趴大菠萝修改器软件...
实测必看!新超圣辅助靠谱不,红... 实测必看!新超圣辅助靠谱不,红龙poker辅助工具,我来教教你(证实有挂);是一款可以让一直输的玩家...
安装程序教程!天天爱柳州麻将辅... 安装程序教程!天天爱柳州麻将辅助器,hhpoker软件安装包,可靠教程(有挂工具);天天爱柳州麻将辅...
重大通报!皮皮辅助软件下载,p... 重大通报!皮皮辅助软件下载,pokemmo手机脚本,2025新版技巧(有挂教程);1、点击下载安装,...
玩家科普!关春天开挂,poke... 玩家科普!关春天开挂,pokemmo手机版脚本免费,总结教程(有挂详情);1.关春天开挂 ai辅助创...
来一盘!雷霆辅助器,德普之星透... 来一盘!雷霆辅助器,德普之星透视辅助,必赢教程(有挂秘籍);雷霆辅助器最新软件透明挂直接下载安装,这...
终于清楚!乐达app辅助,hh... 您好:乐达app辅助这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户的牌特...