我的Quarkus微服务正在使用小黑麦反应性消息传递库中的AMQP连接器,从vromero/actiemq-artemis: 2.16.0-阿尔卑斯
Docker映像向运行的ActiveMQ Artemis代理生成消息。反应式消息传递库留档提到了使用动态地址名的可能性。我在REST资源中使用以下(静态编程语言)代码:
@Inject
@Channel("task-finished")
lateinit var taskFinishedEmitter: MutinyEmitter<String>
@POST
@Produces(MediaType.TEXT_PLAIN)
fun doSomethingAndInform(@RestForm customerId: String): Uni<String> {
// 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<String> = 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")
}
连接器在应用程序中定义。属性
:
amqp-host=localhost
amqp-port=5672
amqp-username=adm
amqp-password=***
mp.messaging.outgoing.task-finished.connector=smallrye-amqp
ActiveMQ Artemis确实动态创建了my-自定义地址
地址,但是它不创建任何绑定到它的队列,并且消息最终被取消路由。
经纪人。xmlconfig文件包含在core
部分中
<acceptor name="amqp">tcp://0.0.0.0:5672?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=AMQP;useEpoll=true;amqpCredits=1000;amqpLowCredits=300;amqpMinLargeMessageSize=102400;amqpDuplicateDetection=true;anycastPrefix=anycast://</acceptor>
<address-setting match="#">
<auto-create-queues>true</auto-create-queues>
</address-settings>
我试着把队列名和地址一起传递
.withAddress("anycast://my-custom-address::my-queue")
但这没什么区别。
以编程方式创建的队列和传递给它的消息缺少什么?另外,为什么Artemis在消息丢失(未路由)时确认消息?
默认情况下,ActiveMQ Artemis将把AMQP客户端发送的消息视为多播(即pub/sub)。多播的语义学规定,发布给代理的每条消息都将被发送给每个订户。然而,由于没有订户,消息被简单地丢弃(即未路由)。
由于您在地址前面加了anycast://
前缀,您应该在broker中的“amqp”
使用acceptor
上配置该前缀。xmlanycastPrefix
参数,例如:
<acceptor name="amqp">tcp://0.0.0.0:5672?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=AMQP;useEpoll=true;amqpCredits=1000;amqpLowCredits=300;amqpMinLargeMessageSize=102400;amqpDuplicateDetection=true;anycastPrefix=anycast://</acceptor>
您还可以更改用于自动创建资源的默认路由类型,例如:
<address-setting match="my-custom-address">
<default-address-routing-type>ANYCAST</default-address-routing-type>
<default-queue-routing-type>ANYCAST</default-queue-routing-type>
</address-settings>
问题内容: 我能够通过Jenkins Web GUI创建一个新节点,然后让容器中运行的节点通过名称和-secret值连接回Jenkins主节点 例如 有没有一种方法可以通过编程方式创建Jenkins节点并获取密码和从属名称,因此我不必通过GUI来执行此操作? 问题答案: 以编程方式创建代理 您可以使用 CLI命令创建具有给定配置的新代理。 例如,考虑到文件中的此最小JNLP代理配置: 您可以通过C
这就是事情。 我正在使用PHP AMQP从Rabbitmq读取结果队列,以便处理发送的每封电子邮件上的重要信息。完成后,我需要将该消息删除或标记为已写入,以便下次读取队列时,不会得到已处理的消息。 由于Rabbitmq服务器每小时发送超过10.000封电子邮件,每次我读取队列以处理结果发送时,脚本至少可以运行5分钟,以便处理队列中的所有消息,因此在完成后,在这5分钟内会发送数百条新消息。这使得我无
问题内容: 我一直在尝试以编程方式重做我的应用程序上的工作。(不使用情节提要) 除了手动制作导航控制器外,我几乎完成了。 我一直在做一些研究,但找不到任何手动实现此方法的文档。(我开始将应用程序制作为单视图应用程序) 目前,我只有1个ViewController。当然是appDelegate 导航控制器将在应用程序的所有页面中使用。 如果有人可以帮助我,或发送指向一些适当文档的链接以编程方式进行此
我有一个使用Spring和RabbitMQ的项目设置。目前,我的应用程序可能会收到一条amqp消息,在另一个异步进程完成之前无法处理该消息(遗留和完全分离,我无法控制)。因此,结果是我可能不得不等待处理消息一段时间。其结果是变压器出现异常。 当消息被NACK回rabbitMQ时,它会将其放回队列的头部,并立即重新拉入队列。如果我收到的无法处理的消息等于并发侦听器的数量,我的工作流就会被锁定。它转动
问题内容: 我知道我可以使用Java中的 api 以编程方式创建文件,如下所示: 但是是否有任何 API 可以构建树?(例如Dom之类的api) 我需要这样的东西: 和: 提前致谢。 问题答案: 由于XSLT也是XML,因此您可以简单地使用相同的策略: 等等… 但这不是很优雅。您应该改用库或框架,但应该很容易找到一个谷歌浏览器。
我有一个WS,它返回非常基本的产品数据:代码、价格和图像。我需要用这些基本数据以编程方式创建Hybris产品,然后进行同步,以便在店面上看到这些产品。 创建具有这些基本信息的产品的步骤是什么?有OOTB服务吗?