RabbitMQ知识点整理4-连接RabbitMQ

package demo.java.web.amqp.rabbitmq.demo2;

import java.io.IOException;
import java.net.URISyntaxException;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.util.concurrent.TimeoutException;

import org.junit.Test;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

/**
 * 连接RabbitMQ
 * 
 * @author jiangkd
 * @date 2020/10/12
 */
public class ConnectRabbitMQDemo {

    final private String IP_ADDRESS = "127.0.0.1";
    final private int PORT = 5672;
    final private String USERNAME = "root";
    final private String PASSWORD = "root123";
    final private String VIRTUALHOST = ""; // 每个VirtualHost相当月一个相对独立的RabbitMQ服务器,每个VirtualHost之间是相互隔离的

    /**
     * 在给定的参数(IP地址, 端口, 用户名, 密码等)下连接rabbitmq
     * 
     * @throws TimeoutException
     * @throws IOException
     */
    @Test
    public void connect1() throws IOException, TimeoutException {
        //
        ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setHost(IP_ADDRESS);
        connectionFactory.setPort(PORT);
        // connectionFactory.setVirtualHost(VIRTUALHOST);
        connectionFactory.setUsername(USERNAME);
        connectionFactory.setPassword(PASSWORD);
        //
        Connection connectioin = connectionFactory.newConnection();

        // 创建信道
        Channel channel = connectioin.createChannel();
    }

    /**
     * 也可以选择使用URI的方式来实现
     * 
     * @throws URISyntaxException
     * @throws NoSuchAlgorithmException
     * @throws KeyManagementException
     * @throws TimeoutException
     * @throws IOException
     */
    @Test
    public void connect2()
        throws KeyManagementException, NoSuchAlgorithmException, URISyntaxException, IOException, TimeoutException {
        //
        ConnectionFactory connectionFactory = new ConnectionFactory();
        // amqp://username:password@host:port/virtualHost
        connectionFactory.setUri("amqp://root:root123@127.0.0.1:5672/");

        //
        Connection connectioin = connectionFactory.newConnection();

        // 创建信道
        Channel channel = connectioin.createChannel();
    }
}
View Code
注意要点:Connection 可以用来创建多个Channel 实例, 但是Channel 实例不能在线程问共享, 应用程序应该为每一个线程开辟一个Channel

Channel和Connection中有个isOpen方法可以用来检测其是否已处于开启状态, 但是不推荐在生产环境中使用此方法. 通常在调用createXXX或newXXX方法之后, 我们可以简单的认为Connection或Channel已经处于开启状态, 而不会使用isOpen方法, 如果在使用Channel的时候其处于关闭状态, 那么程序会抛出一个com.rabbitmq.client.ShutdownSignalException, 我们只需要捕获这个异常即可, 当然同时也要试着捕获IOException或者SocketException, 以防Connection意外关闭。

代码中连接RabbitMQ的时候还可以设置virtualHost, 那么virtualHost是什么呢?

RabbitMq的VirtualHost(虚拟消息服务器),每个VirtualHost相当于一个相对独立的RabbitMQ服务器;每个VirtualHost之间是相互隔离的,exchange、queue、message不能互通。

拿数据库(用MySQL)来类比:RabbitMq相当于MySQL,RabbitMq中的VirtualHost就相当于MySQL中的一个库。

Virtual Name一般以/开头

如上图在创建完vhost后可以在All Virtual Host标签看到新建的VirtualHost。

默认的virtualHost是[/], 和其他virtual host 是平级对等关系;

原文地址:https://www.cnblogs.com/no-celery/p/13802336.html