Grails、Grails RabbitMQ 插件、Java 、Spring AMQP - 多个客户端

Posted

技术标签:

【中文标题】Grails、Grails RabbitMQ 插件、Java 、Spring AMQP - 多个客户端【英文标题】:Grails, Grails RabbitMQ plugin, Java ,Spring AMQP - Multiple clients 【发布时间】:2014-12-13 05:49:08 【问题描述】:

我开发了简单的 Grails REST Web 服务,它使用 Grails RabbitMQ 插件并将消息发送到队列。

Grails - Config.groovy

queues = 
    exchange name: 'my.topic', type: topic, durable: false, 
        foo durable: true, binding: 'test.#'

    

在我的 Java 桌面应用程序中,我尝试使用 Spring AMQP

收听该消息

Main.java

public static void main(String[] args) 
    CachingConnectionFactory cf = new CachingConnectionFactory("localhost");
     cf.setUsername("guest");
     cf.setPassword("guest");
        RabbitAdmin admin = new RabbitAdmin(cf);
        SimpleMessageListenerContainer container =
                new SimpleMessageListenerContainer(cf);

        Object listener = new Object() 
            public void handleMessage(String foo) 
                System.out.println(foo);
            
        ;

        MessageListenerAdapter adapter = new MessageListenerAdapter(listener);
        container.setMessageListener(adapter);
        container.setQueueNames("foo");
        container.start();

当我运行多个客户端(比如两个)时,有时一个接收“消息”,有时另一个。 两个客户端如何在每次“发送”时接收“消息”(我通过重新加载页面从我的索引 Grails 控制器发送消息)。

这样做的首选方法是什么?我是新手:)

【问题讨论】:

【参考方案1】:

每个消费者都需要将自己的队列绑定到交换器。

同一队列上的多个消费者竞争消息。

【讨论】:

是否可以开发一个应用程序来侦听该队列上的不同消息。那么我的 Main.java 会怎样呢? 没有。与 JMS 不同,AMQP 中没有队列上的消息选择器的概念。您必须配置交换以在代理中进行选择。您可以在一个侦听器容器中侦听多个队列,但不能仅侦听选定的消息(如果您是这个意思)。 如何在一个监听器中监听多个队列。你能告诉我一些代码吗?我正在努力学习 AMQP 概念。 container.setQueueNames("foo", "bar", "baz");我建议您查看Spring AMQP sample apps 以开始使用。另请参阅RabbitMQ Tutorials。 谢谢。这个概念,AMQP 和 RabbitMQ 是否可以用于下一个场景。创建 java 桌面应用程序,同一应用程序的多个实例将在专用网络上运行不同的机器。所有应用程序将如何检测来自服务器的更改(从 Grails 服务器发送消息)你能给我简短的基本概念描述吗?

以上是关于Grails、Grails RabbitMQ 插件、Java 、Spring AMQP - 多个客户端的主要内容,如果未能解决你的问题,请参考以下文章

用于 Grails 2.0 的 Grails/Gradle 插件

如何从另一个 grails 插件配置 grails 插件

Grails 3 - 资源插件

通过 Spring Security 配置 Grails 配置插件 grails-ckeditor

如何在 grails 中实现表单构建器插件

将 grails 2 插件导出到 grails 3 时出错