Java中的回调机制,这篇给你整的明明白白的,kafka基础架构

public class Store {

@Getter

@Setter

private String name;

Store(String name) {

this.name = name;

}

/回调函数, 将结构传给那个我们不能直接调用的方法, 然后获取结果/

public String returnOrderGoodsInfo(OrderResult order) {

String[] s = {“订购中…”, “订购失败”, “即将发货!”, “运输途中…”, “已在投递”};

Random random = new Random();

int temp = random.nextInt(5);

String s1 = s[temp];

return order.getOrderResult(s1);

}

}

SyncBuyer类, 同步顾客类, 其中获取商品的订购状态,orderGoods(), 调用了store返回商品调用信息的returnOrderGoodsInfo()方法, 但是在Store类的returnOrderGoodsInfo()方法之中, 以OrderResult接口为参数, 反过来调用了OrderResult接口, 相当于调用了其子类SyncBuyer本身, 以它为参数, 调用了getOrderResult(String state)方法, 也就是OrderResult接口的方法, 相当于就完成了一个调用的循环, 然后取到了我们自己无法给出的结果.

这个地方的"循环", 是回调的关键所在, 需要正常调用其他外接提供方法来获取结果的一方, 集成一个回调接口, 实现它, 然后调用第三方的API方法, 第三方在我们调用的方法之中, 以回调结构为参数, 然后调用了接口中的方法, 其中可以返回相应的结果给我们.

需要说明的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供有关Java实现Kafka消费并回调的帮助。在Java,您可以使用Kafka的Consumer API来实现消费者逻辑,并使用Kafka的Callback机制回调处理结果。以下是示例代码: ```java import org.apache.kafka.clients.consumer.*; import org.apache.kafka.common.TopicPartition; import java.util.*; public class MyKafkaConsumer { private static final String TOPIC_NAME = "my-topic"; // Kafka主题名称 private static final String GROUP_ID = "my-group"; // 消费者组ID public static void main(String[] args) { Properties props = new Properties(); props.put("bootstrap.servers", "localhost:9092"); // Kafka集群地址 props.put("group.id", GROUP_ID); props.put("enable.auto.commit", "false"); // 手动提交消费位移 props.put("auto.offset.reset", "earliest"); // 从最早的消息开始消费 props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); // 反序列化器 props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props); // 订阅主题 consumer.subscribe(Collections.singletonList(TOPIC_NAME), new ConsumerRebalanceListener() { @Override public void onPartitionsRevoked(Collection<TopicPartition> partitions) { // 消费者停止消费分区时调用 consumer.commitSync(currentOffsets()); } @Override public void onPartitionsAssigned(Collection<TopicPartition> partitions) { // 消费者开始消费分区时调用 } }); try { while (true) { ConsumerRecords<String, String> records = consumer.poll(1000); // 拉取消息 for (ConsumerRecord<String, String> record : records) { System.out.printf("消费消息: partition = %d, offset = %d, key = %s, value = %s%n", record.partition(), record.offset(), record.key(), record.value()); // TODO: 处理消息逻辑 } consumer.commitAsync(); // 异步提交消费位移 } } finally { consumer.close(); // 关闭消费者 } } // 获取当前消费者消费位移 private static Map<TopicPartition, OffsetAndMetadata> currentOffsets() { Map<TopicPartition, OffsetAndMetadata> currentOffsets = new HashMap<>(); for (TopicPartition partition : consumer.assignment()) { currentOffsets.put(partition, new OffsetAndMetadata(consumer.position(partition))); } return currentOffsets; } } ``` 以上代码实现了一个简单的Kafka消费者,并使用了手动提交消费位移以及异步提交消费位移的方式。同时,代码还实现了ConsumerRebalanceListener接口来监听消费者停止消费分区以及开始消费分区的事件。 希望这个例子能够帮助您理解如何在Java实现Kafka消费并回调。如果您有任何其他问题,请随时与我交流。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值