Java 如何从主项目源代码中提取RabbitMQ使用者和生产者

Java 如何从主项目源代码中提取RabbitMQ使用者和生产者,java,rabbitmq,spring-amqp,spring-rabbit,Java,Rabbitmq,Spring Amqp,Spring Rabbit,我有一个项目,其中使用RabbitMQ的微服务模块的数量为“n”。 目前,每个微服务都有自己的RabbitMQ使用者和生产者实现。但我想将与RabbitMQ的这种交互抽象并隔离到外部库中的一个公共方法中,这样我的项目就不会与RabbitMQ代理紧密耦合——我希望将来可以相对轻松地将其更改为ActiveMQ等 生产者抽象似乎很简单,但如何实现消费者抽象? 我希望能够使用队列名称作为外部/外部方法的参数调用consumer方法,并且它应该返回它从给定队列名称接收到的消息。 我已经研究过在配置了消息侦

我有一个项目,其中使用RabbitMQ的微服务模块的数量为“n”。 目前,每个微服务都有自己的RabbitMQ使用者和生产者实现。但我想将与RabbitMQ的这种交互抽象并隔离到外部库中的一个公共方法中,这样我的项目就不会与RabbitMQ代理紧密耦合——我希望将来可以相对轻松地将其更改为ActiveMQ等

生产者抽象似乎很简单,但如何实现消费者抽象? 我希望能够使用队列名称作为外部/外部方法的参数调用consumer方法,并且它应该返回它从给定队列名称接收到的消息。 我已经研究过在配置了消息侦听器的情况下使用SpringAmqp@RabbitListener注释或RabbitTemplate,但看起来我需要首先静态配置队列名称。我还尝试了Java客户机通道basicConsume,但我无法找到一种方法来使用basicConsume提取/发送消息到外部方法

如果您对示例有任何帮助,我们将不胜感激。

请考虑使用Spring AMQP,而不是直接使用Spring AMQP

通过这种方式,您可以使用不同的技术轻松地交换入站/出站通道适配器,因为那里的适配器使用一个通用的(spring messaging)
Message
抽象

但是看起来我需要首先静态地配置队列名称


事实并非如此;队列名称可以通过属性和/或SpEL表达式填充。

Gary,感谢您的及时响应。事实并非如此;队列名称可以通过属性和/或SpEL表达式填充。我可以向您保证这是真的(我编写了代码)。请参阅-
@RabbitListener(queues=“test.{${my.queue.suffix:SIMPLE}.toLowerCase()}”
-结果为
测试。简单
。我想将队列名称作为方法参数传递,并使用此方法参数填充@RabbitListener中的队列名称,因此我的使用者方法将侦听我传递给方法参数的队列名称。是否可以使用@RabbitListener进行此操作?如何实现此用例?您可以使用相同的技术我在回答中使用的nique。它是为卡夫卡而不是拉比MQ设计的,但它也会以同样的方式工作。