主题解决

在生成或接收消息时需要一个目标主题。 该框架按以下顺序查找主题(从第一个发现处停止):spring-doc.cadn.net.cn

当通过默认机制找到主题时,无需在生产或消费API中指定主题。spring-doc.cadn.net.cn

当找不到某个主题时,API 会相应地抛出异常。spring-doc.cadn.net.cn

1. 用户指定

输入到所使用的API中的主题具有最高的优先级(例如,PulsarTemplate.send(“我的主题”,myMessage)@PulsarListener(topics = “我的主题”).spring-doc.cadn.net.cn

2. 消息类型默认

当API中没有传入主题时,系统会寻找针对所生成或消费消息类型配置的消息类型到主题映射。spring-doc.cadn.net.cn

映射可以通过以下配置配置spring.pulsar.defaults.type-mappings财产。 以下示例使用application.yml配置默认主题以在消费或生产时使用酒吧消息:spring-doc.cadn.net.cn

spring:
  pulsar:
    defaults:
      type-mappings:
        - message-type: com.acme.Foo
          topic-name: foo-topic
        - message-type: com.acme.Bar
          topic-name: bar-topic
消息类型是消息类的全限定名称。
如果消息(或第一条消息)是发行人输入)是框架无法从中确定主题。如果您的申请可能会发送,则会采用另一种方法来指定主题消息。

2.1. 通过注释指定

当没有主题传递到API且没有配置自定义主题映射时,系统会寻找@PulsarMessage对被生成或消耗的消息类别进行注释。 默认主题可以通过以下方式指定主题注释上的属性。spring-doc.cadn.net.cn

以下示例配置了在生成或使用此类消息时使用的默认主题:spring-doc.cadn.net.cn

@PulsarMessage(topic = "foo-topic")
record Foo(String value) {
}

属性占位符和 SpEL 表达式在@PulsarMessage注解 例如:spring-doc.cadn.net.cn

@PulsarMessage(topic = "${app.topics.foo}")
record Foo(String value) {
}

@PulsarMessage(topic = "#{someBean.getTopic()}")
record Bar(String value) {
}

2.2. 自定义主题解析器

添加映射的首选方法是上述属性。 然而,如果需要更多控制,可以通过证明自己的实现来替换默认解析器,例如:spring-doc.cadn.net.cn

@Bean
public MyTopicResolver topicResolver() {
	return new MyTopicResolver();
}

3. 生产者全球违约

制作时最后咨询的地点是系统范围内的生产者默认话题。 它通过spring.pulsar.producer.topic-name财产。spring-doc.cadn.net.cn

4. 消费者全球违约

最终查询的地点(在消费时)是系统范围的消费者默认话题。 它通过spring.pulsar.consumer.topicsspring.pulsar.consumer.topics-pattern财产。spring-doc.cadn.net.cn