Java 关闭到RabbitMQ的连接

Java 关闭到RabbitMQ的连接,java,rabbitmq,Java,Rabbitmq,我创建了一个简单的控制台应用程序,用于监听Rabbit MQ上的消息。很好。没问题。但我如何关闭连接。我在谷歌搜索了很多次,但没有找到任何明确的答案。我得到的最接近答案是这样一个问题:,但答案忽略了最重要的部分:代码 这是我的密码: package com.company; import com.rabbitmq.client.*; import java.io.IOException; import java.util.ArrayList; import java.util.List; i

我创建了一个简单的控制台应用程序,用于监听Rabbit MQ上的消息。很好。没问题。但我如何关闭连接。我在谷歌搜索了很多次,但没有找到任何明确的答案。我得到的最接近答案是这样一个问题:,但答案忽略了最重要的部分:代码

这是我的密码:

package com.company;

import com.rabbitmq.client.*;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeoutException;

interface ObjectRecievedListener {
    void objectRecieved(Object obj);
}

public class RabbitMQReceiver extends RabbitMQBase
{

    ArrayList<DefaultConsumer> consumers = new ArrayList<>();

    private List<ObjectRecievedListener> listeners = new ArrayList<>();
    private final Connection connection;
    private final Channel channel;

    public RabbitMQReceiver(RabbitMQProperties properties) throws IOException, TimeoutException {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost(properties.getHost());
        factory.setPassword(properties.getPassword());
        factory.setUsername(properties.getLogin());

        connection = factory.newConnection();
        channel = connection.createChannel();
        channel.queueDeclare(properties.getInboundQueueName(), true, false, false, null);
        channel.basicQos(1);

        final Consumer consumer = new DefaultConsumer(channel) {
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                String message = new String(body, "UTF-8");


                try {
                    doWork(message);
                } finally {
                    channel.basicAck(envelope.getDeliveryTag(), false);
                }
            }
        };

        consumers.add((DefaultConsumer) consumer);

        boolean autoAck = false;
        channel.basicConsume(properties.getInboundQueueName(), autoAck, consumer);
    }

    public void addListener(ObjectRecievedListener listener) {
        listeners.add(listener);
    }

    public void stop() {
        try {
            channel.close();
            connection.close();
        } catch (Exception e) {
        }
    }

    private void doWork(String message) {
        Object obj = getObjectFromXML(message);

        for (ObjectRecievedListener l : listeners)
            l.objectRecieved(obj);
        stop();
    }
}
package.com公司;
导入com.rabbitmq.client.*;
导入java.io.IOException;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.concurrent.TimeoutException;
接口对象ReceivedListener{
收到的无效对象(对象对象);
}
公共类RabbitMQReceiver扩展RabbitMQBase
{
ArrayList使用者=新的ArrayList();
私有列表侦听器=新的ArrayList();
专用终端连接;
专用最终通道;
公共RabbitMQReceiver(RabbitMQProperties属性)引发IOException、TimeoutException{
ConnectionFactory工厂=新的ConnectionFactory();
setHost(properties.getHost());
setPassword(properties.getPassword());
setUsername(properties.getLogin());
connection=factory.newConnection();
channel=connection.createChannel();
channel.queueDeclare(properties.getInboundQueueName(),true、false、false、null);
基本频道(1);
最终消费者=新的默认消费者(渠道){
@凌驾
public void handleDelivery(字符串consumerTag、信封信封、AMQP.BasicProperties属性、字节[]正文)引发IOException{
字符串消息=新字符串(正文,“UTF-8”);
试一试{
道具(信息);
}最后{
channel.basicAck(envelope.getDeliveryTag(),false);
}
}
};
consumers.add((DefaultConsumer)consumer);
布尔自动确认=假;
channel.basicConsume(properties.getInboundQueueName(),autoAck,consumer);
}
public void addListener(objectReceivedListener侦听器){
添加(侦听器);
}
公共停车场(){
试一试{
channel.close();
connection.close();
}捕获(例外e){
}
}
专用void doWork(字符串消息){
Object obj=getObjectFromXML(消息);
for(ObjectReceivedListener l:侦听器)
l、 接收的对象(obj);
停止();
}
}
但它并不是因为我调用了
stop()


简而言之:如何关闭与Rabbit MQ的连接?

试试这个:

let connection = null;

    connection = await amqp.connect(`amqp://${config.username}:${config.password}@${config.host}:${config.port}`);

    connection.close();

RabbitMQ团队监视并仅有时回答有关StackOverflow的问题


当您说“它不停止”时,您是否确认实际调用了
stop()
方法?您的代码是否挂在某个
close()
方法上


channel
实例将有一个实例,您可以在关闭频道和连接之前调用该实例以取消当前消费者。老实说,关闭频道将取消您的消费者,因此我怀疑这是问题的根本原因。

这是JavaScript