首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ActiveMQ Artemis:从smallrye-reactive-messaging (AMQP)以编程方式创建队列

ActiveMQ Artemis:从smallrye-reactive-messaging (AMQP)以编程方式创建队列
EN

Stack Overflow用户
提问于 2021-03-01 07:53:01
回答 1查看 380关注 0票数 0

我的Quarkus微服务正在使用smallrye反应式消息传递库中的AMQP连接器来生成发送到从运行的ActiveMQ Artemis代理的消息

Docker镜像。The The The

反应式消息库

文档提到了使用动态地址名称的可能性。我在REST资源中使用以下(Kotlin)代码:

代码语言:javascript
复制
@Inject
    @Channel("task-finished")
    lateinit var taskFinishedEmitter: MutinyEmitter

    @POST
    @Produces(MediaType.TEXT_PLAIN)
    fun doSomethingAndInform(@RestForm customerId: String): Uni {

       // leaving out the actual messageText computation...

       val messageText: String = "DUMMY MESSAGE"
       val metadata: OutgoingAmqpMetadata = OutgoingAmqpMetadata.builder()
          .withDurable(true)
          .withCorrelationId(customerId)
          .withAddress("anycast://my-custom-address")
          .build()

       val message: Message = Message.of(messageText,
            {
                logger.info("message acked")
                CompletableFuture.completedFuture(null)
            },
            {
                logger.info("message nacked: {}", it.message)
                CompletableFuture.completedFuture(null)
            }
       )

       taskFinishedEmitter.send(message.addMetadata(metadata))
       return Uni.createFrom().item("DONE")
    }

连接器在

代码语言:javascript
复制
amqp-host=localhost
amqp-port=5672
amqp-username=adm
amqp-password=***

mp.messaging.outgoing.task-finished.connector=smallrye-amqp

ActiveMQ Artemis确实创建了

动态寻址,但是它不会创建任何绑定到它的队列,消息最终是

未路由

..。

The The The

配置文件包含在

部分

代码语言:javascript
复制
tcp://0.0.0.0:5672?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=AMQP;useEpoll=true;amqpCredits=1000;amqpLowCredits=300;amqpMinLargeMessageSize=102400;amqpDuplicateDetection=true;anycastPrefix=anycast://

   true

我尝试将队列名称与地址一起传递

代码语言:javascript
复制
.withAddress("anycast://my-custom-address::my-queue")

但这并没有什么不同。

以编程方式创建的队列和传递给它的消息缺少什么?另外,当消息丢失(未路由)时,Artemis为什么要确认消息?

更新:从Artemis web界面附加屏幕截图

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-01 08:08:37

默认情况下,Artemis会将ActiveMQ客户端发送的消息视为

组播

(即发布/订阅)。多播的语义规定,发布到代理的每个消息都将被分派到每个订阅者。然而,由于没有订阅者,消息被简单地丢弃(即未路由)。

因为你在你的地址前面加了前缀

您应该在"amqp“上配置该前缀。

使用

参数,例如:

代码语言:javascript
复制
tcp://0.0.0.0:5672?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=AMQP;useEpoll=true;amqpCredits=1000;amqpLowCredits=300;amqpMinLargeMessageSize=102400;amqpDuplicateDetection=true;anycastPrefix=anycast://

您还可以更改用于自动创建的资源的默认路由类型,例如:

代码语言:javascript
复制
ANYCAST
   ANYCAST
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66415067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档