我正在尝试在 Spring Boot 中使用 JMS 将消息推送到 azure 服务总线主题。
正如你在下面看到的,我已经依赖于azure-servicebus-jms-spring-boot-starter
我已经@EnableJms
在我的应用程序中进行了配置,并且我还在我的 application.yml 文件中设置了连接字符串,我已经验证它是正确的,我可以看到它正确连接到服务总线,如这些日志中所示 -
2020-12-15 13:36:18.431 INFO 4487 --- [windows.net:-1]] o.a.qpid.jms.sasl.SaslMechanismFinder : Best match for SASL auth was: SASL-PLAIN
2020-12-15 13:36:18.704 INFO 4487 --- [windows.net:-1]] org.apache.qpid.jms.JmsConnection : Connection ID:MY_CONNECTION connected to remote Broker: amqps://**-****-*****.servicebus.windows.net
设置此连接后,我将尝试使用我在下面指定的服务向我的服务总线上的主题发送消息,但是我在服务总线上没有看到任何事务。我已经确认目的地是正确的。
因为我没有在此应用程序上使用订阅,所以我没有按照此处spring.jms.servicebus.topic-client-id=<ServiceBusSubscriptionID>
指定的方式指定这样做
在我指定主题客户端 ID(一个不同的应用程序)的消费端,我创建了一个虚拟控制器来将示例消息发送到服务总线,它工作正常,这会让我相信我在这个应用程序上缺少一些配置.
但是我不需要在这里指定任何特定的主题客户端 ID,因为我只想推送到主题。一旦我有了服务总线连接字符串,我应该能够将消息推送到我指定的任何主题 -jmsTemplate.convertAndSend(<TOPIC_NAME>, <MESSAGE>)
@Service
class MessageServiceImpl : MessageService {
private val logger: Logger = LoggerFactory.getLogger(this.javaClass)
@Autowired
lateinit var jmsTemplate: JmsTemplate
override fun sendMessage(topic: Topic, message: Message): Result<Unit> = Result {
logger.info("Sending message $message to topic ${topic.destination}")
jmsTemplate.convertAndSend(topic.destination, message)
}
}
enum class Topic(val destination: String) {
AWARDS("awards")
}
open class Message(
val eventTrigger: String,
val eventTriggeredBy: String,
val eventTimestamp: LocalDateTime,
val eventSourceSystem: String
)
jms:
servicebus:
connection-string: ${JMS_CONNECTION_STRING:''}
idle-timeout: 180000
compile 'com.microsoft.azure:azure-servicebus-jms-spring-boot-starter:2.2.5'
@SpringBootApplication
@EnableJms
class WebServiceApplication {
companion object {
@JvmStatic
fun main(args: Array<String>) {
SpringApplication.run(WebServiceApplication::class.java, *args)
}
}
}