如何使用Spring Boot 2.2和嵌入式broker创建Artemis最后一个值队列



我正在尝试创建一个启用了last value属性的ActiveMQ Artemis队列。

我的应用程序使用Spring Boot 2.2.6,我使用Artemis作为嵌入式代理。


Spring Boot有一个spring.artemis.embedded.queues属性,我试图设置如下:

spring.artemis.embedded.queues: myqueue?last-value-key=code

但这似乎并不奏效。

Artemis文档提到了两种配置队列的方法:

  1. 使用broker.xml配置文件,但我无法使其工作
  2. 获得了一个CORE会话对象,但我没能通过Spring获得该对象

是否有一种简单的方法可以通过application.yml或Java/Kotlin配置使用Spring Boot配置最后一个值队列


这是我的测试代码:

@ExtendWith(SpringExtension::class)
@SpringBootTest
class ArtemisTest(
@Autowired private val jmsTemplate: JmsTemplate
) {
@Test
fun testMessage() {
for(i in 1..5) {
jmsTemplate.convertAndSend(
"myqueue",
"message $i"
) {
it.also { it.setStringProperty("code", "1") }
}
}
val size = jmsTemplate.browse("myqueue") { _: Session, browser: QueueBrowser ->
browser.enumeration.toList().size
}
assertThat(size).isEqualTo(1)
}
}

通过挖掘Spring Boot的代码,我发现可以为提供ArtemisConfigurationCustomizer

在Artemis JMS服务器配置被自动配置的EmbeddedActiveMQ实例

@Configuration
class ArtemisConfig : ArtemisConfigurationCustomizer {
override fun customize(configuration: org.apache.activemq.artemis.core.config.Configuration?) {
configuration?.let {
it.addQueueConfiguration(
CoreQueueConfiguration()
.setAddress("myqueue")
.setName("myqueue")
.setLastValueKey("code")
.setRoutingType(RoutingType.ANYCAST)
)
}
}
}

相关内容

  • 没有找到相关文章

最新更新