连接 RabbitMQ

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

1
2
3
4
5
6
7
8

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

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

1
2
3
4

Connection 可以用来创建多个 Channel,但是 Channel 不能线程共享使用。
channel 的开启有一个 isOpen 方法可以得知

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

1
2
3
4
5
6
7

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

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