RabbitMQ消息没有完成

时间:2018-04-07 18:20:16

标签: rabbitmq

我想使用RabbitMQ将消息从webapp后端发送到第二个模块。在我的笔记本电脑上,它可以工作,但是当我在VPS上部署应用程序时,即使在开发模式下,它也不再起作用了......你能帮我解决一下吗?

当前状态:

如果我检查VPS上安装了两个模块的队列,那么它看起来没问题(消息被添加到队列中)

$ rabbitmqctl list_queues
Timeout: 60.0 seconds ...
Listing queues for vhost / ...
MyMessages        2

当我启动第二个模块时,我得到以下日志:

Waiting for a request on queue : MyMessages, hosted at localhost

来自以下java代码:

public static void main(String[] args) throws IOException, TimeoutException {
    RabbitMQConsumer rabbitMQConsumer = new RabbitMQConsumer();
    rabbitMQConsumer.waitForRequests();
    System.out.println("Waiting for a request on queue : " + AppConfig.QUEUE_NAME + ", hosted at " + AppConfig.QUEUE_HOST);
}

public RabbitMQConsumer() throws IOException, TimeoutException {
    mapper = new ObjectMapper();
    ConnectionFactory connectionFactory = new ConnectionFactory();
    connectionFactory.setHost(AppConfig.QUEUE_HOST);
    Connection connection = connectionFactory.newConnection();
    channel = connection.createChannel();
}

public void waitForRequests() throws IOException {
    DefaultConsumer consumer = new DefaultConsumer(channel) {
        @Override
        public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
            try {
                System.out.println("Message received ! ");
                channel.basicAck(envelope.getDeliveryTag(), false);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    };
    channel.queueDeclare(AppConfig.QUEUE_NAME, true, false, false, null);
    channel.basicConsume(AppConfig.QUEUE_NAME, consumer);
}

我认为两个模块都在查看相同的队列,在quue中有消息,所以......对我来说,看起来消息没有消失......我看了一下rabbitMQ的状态,但我不知道如何使用它:

$ invoke-rc.d rabbitmq-server status
● rabbitmq-server.service - RabbitMQ broker
   Loaded: loaded (/lib/systemd/system/rabbitmq-server.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2018-04-07 18:24:59 CEST; 1h 38min ago
  Process: 17103 ExecStop=/usr/lib/rabbitmq/bin/rabbitmqctl shutdown (code=exited, status=0/SUCCESS)
 Main PID: 17232 (beam.smp)
   Status: "Initialized"
    Tasks: 84 (limit: 4915)
   CGroup: /system.slice/rabbitmq-server.service
           ├─17232 /usr/lib/erlang/erts-9.3/bin/beam.smp -W w -A 64 -P 1048576 -t 5000000 -stbt db -zdbbl 1280000 -K true -- -root /usr/lib/erlang -progname erl -- -home /var/lib/rabbitmq -- -pa /usr/lib/r
abbitmq/lib/rabbitmq_server-3.7.4/ebin -noshell -noinput -s rabbit boot -sname rabbit@vps5322 -boot start_sasl -kernel inet_default_connect_options [{nodelay,true}] -sasl errlog_type error -sasl sasl_err
or_logger false -rabbit lager_log_root "/var/log/rabbitmq" -rabbit lager_default_file "/var/log/rabbitmq/rabbit@vps5322.log" -rabbit lager_upgrade_file "/var/log/rabbitmq/rabbit@vps5322_upgrade.log" -r
abbit enabled_plugins_file "/etc/rabbitmq/enabled_plugins" -rabbit plugins_dir "/usr/lib/rabbitmq/plugins:/usr/lib/rabbitmq/lib/rabbitmq_server-3.7.4/plugins" -rabbit plugins_expand_dir "/var/lib/rabbitmq/
mnesia/rabbit@vps5322-plugins-expand" -os_mon start_cpu_sup false -os_mon start_disksup false -os_mon start_memsup false -mnesia dir "/var/lib/rabbitmq/mnesia/rabbit@vps5322" -kernel inet_dist_listen_m
in 25672 -kernel inet_dist_listen_max 25672
           ├─17319 /usr/lib/erlang/erts-9.3/bin/epmd -daemon
           ├─17453 erl_child_setup 1024
           ├─17475 inet_gethost 4
           └─17476 inet_gethost 4

Apr 07 18:24:57 vps5322 rabbitmq-server[17232]:   ##  ##
Apr 07 18:24:57 vps5322 rabbitmq-server[17232]:   ##  ##      RabbitMQ 3.7.4. Copyright (C) 2007-2018 Pivotal Software, Inc.
Apr 07 18:24:57 vps5322 rabbitmq-server[17232]:   ##########  Licensed under the MPL.  See http://www.rabbitmq.com/
Apr 07 18:24:57 vps5322 rabbitmq-server[17232]:   ######  ##
Apr 07 18:24:57 vps5322 rabbitmq-server[17232]:   ##########  Logs: /var/log/rabbitmq/rabbit@vps5322.log
Apr 07 18:24:57 vps5322 rabbitmq-server[17232]:                     /var/log/rabbitmq/rabbit@vps5322_upgrade.log
Apr 07 18:24:57 vps5322 rabbitmq-server[17232]:               Starting broker...
Apr 07 18:24:59 vps5322 rabbitmq-server[17232]: systemd unit for activation check: "rabbitmq-server.service"
Apr 07 18:24:59 vps5322 systemd[1]: Started RabbitMQ broker.
Apr 07 18:24:59 vps5322 rabbitmq-server[17232]:  completed with 0 plugins.

最后,请注意,webapp应用程序是一个PlayFramework应用程序,具有以下依赖项:

libraryDependencies ++= Seq(
  guice,
  "com.rabbitmq" % "amqp-client" % "5.2.0"
)

而第二个模块是纯Java代码,基于maven,具有以下pom:

<dependency>
    <groupId>com.rabbitmq</groupId>
    <artifactId>amqp-client</artifactId>
    <version>5.2.0</version>
</dependency>

对这个问题有什么看法? 非常感谢!!

1 个答案:

答案 0 :(得分:0)

最后我发现了问题。这个配置实际上是有效的,但由于我的应用程序中由于我的log4J配置中的错误而未记录的崩溃,我无法看到它。

以防万一,我遇到的错误是我的pom中包含了一个包含在相对路径($ {project.basedir})中的本地库,但是在部署到VPS之后却找不到了。为了解决这个问题,我把这个(希望)非常小的库直接移到了我的项目中。解决了这个问题之后,我不得不重置rabbitMQ,然后一切都很好:

rabbitmqctl stop_app    rabbitmqctl重置    rabbitmqctl start_app

非常感谢, 的问候,