zoukankan      html  css  js  c++  java
  • 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 是平级对等关系;

  • 相关阅读:
    使用Newtonsoft进行JSON序列化时将枚举序列化为字符串的方法
    通过javac导出Jar包
    JAVA中JDBC连接Mysql数据库简单测试
    使用Swashbuckle.AspNetCore生成.NetCore WEBAPI的接口文档
    CentOS7中使用yum安装Nginx的方法
    Dockerfile 指令 ADD 和 COPY介绍
    Azure Web应用中设置静态虚拟目录的方法(比如部署Django需要用到)
    pip常用命令(转载)
    android发布新版忘记keystore(jks)密码终极解决方案
    IntelliJ Idea 常用快捷键列表
  • 原文地址:https://www.cnblogs.com/no-celery/p/13802336.html
Copyright © 2011-2022 走看看