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 是平级对等关系;

  • 相关阅读:
    [LintCode] 1563. Shortest path to the destination
    [LintCode] 1835. Number of Ways to Stay in the Same Place After Some Steps I
    [Algo] 140. Maximum Path Sum Binary Tree III
    [Algo] 141. Binary Tree Path Sum To Target III
    [LintCode] 597. Subtree with Maximum Average
    [LintCode] 596. Minimum Subtree
    [LC] 16. 3Sum Closest
    [Algo] 182. 2 Sum All Pair II
    [Algo] 181. 2 Sum All Pair I
    创建ORACLE 查询用户
  • 原文地址:https://www.cnblogs.com/no-celery/p/13802336.html
Copyright © 2011-2022 走看看