# 连接 RabbitMQ

final ConnectionFactory factory = new ConnectionFactory();
factory.setHost(IP_ADDRESS);
factory.setPort(PORT);
factory.setUsername(USERNAME);
factory.setPassword(PASSWORD);
factory.setVirtualHost(VIRTUAL_HOST);
final Connection connection = factory.newConnection();
final Channel channel = connection.createChannel();
1
2
3
4
5
6
7
8

以上代码分别给定参数:IP、端口、用户名、密码等连接 RabbitMQ,还可以使用 URI 的方式来实现

final ConnectionFactory factory = new ConnectionFactory();
factory.setUri("amqp://username:password@ipAddress:port/virtualHost");
final Connection connection = factory.newConnection();
final Channel channel = connection.createChannel();
1
2
3
4

Connection 可以用来创建多个 Channel,但是 Channel 不能线程共享使用。

channel 的开启有一个 isOpen 方法可以得知

com.rabbitmq.client.impl.ShutdownNotifierComponent#isOpen    
@Override
    public boolean isOpen() {
    synchronized(this.monitor) {
        return this.shutdownCause == null;
    }
}
1
2
3
4
5
6
7

在生产环境中不建议使用,来判断。我们认为 connection.createChannel() 返回后,就创建信道成功了。包括 isOpen 源码上也说明了,建议捕获异常。不建议调用该方法

应该使用 try 的方式来捕获异常。

final Connection connection = factory.newConnection();
final Channel channel = connection.createChannel();
try {
    channel.basicQos(1);
} catch (IOException e) {
    e.printStackTrace();
}
1
2
3
4
5
6
7