主题解决
在生成或接收消息时需要一个目标主题。 该框架按以下顺序查找主题(从第一个发现处停止):
-
用户指定
-
消息类型默认
-
全局违约
当通过默认机制找到主题时,无需在生产或消费API中指定主题。
当找不到某个主题时,API 会相应地抛出异常。
1. 用户指定
输入到所使用的API中的主题具有最高的优先级(例如,PulsarTemplate.send(“我的主题”,myMessage)或@PulsarListener(topics = “我的主题”).
2. 消息类型默认
当API中没有传入主题时,系统会寻找针对所生成或消费消息类型配置的消息类型到主题映射。
映射可以通过以下配置配置spring.pulsar.defaults.type-mappings财产。
以下示例使用application.yml配置默认主题以在消费或生产时使用福或酒吧消息:
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对被生成或消耗的消息类别进行注释。
默认主题可以通过以下方式指定主题注释上的属性。
以下示例配置了在生成或使用此类消息时使用的默认主题福:
@PulsarMessage(topic = "foo-topic")
record Foo(String value) {
}
属性占位符和 SpEL 表达式在@PulsarMessage注解
例如:
@PulsarMessage(topic = "${app.topics.foo}")
record Foo(String value) {
}
@PulsarMessage(topic = "#{someBean.getTopic()}")
record Bar(String value) {
}
3. 生产者全球违约
制作时最后咨询的地点是系统范围内的生产者默认话题。
它通过spring.pulsar.producer.topic-name使用命令式 API 时的属性spring.pulsar.reactive.sender.topic-name在使用响应式API时。
4. 消费者全球违约
最终查询的地点(在消费时)是系统范围的消费者默认话题。
它通过spring.pulsar.consumer.topics或spring.pulsar.consumer.topics-pattern当使用命令式 API 和其中一个spring.pulsar.reactive.consumer.topics或spring.pulsar.reactive.consumer.topics-pattern在使用响应式API时。