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

  • 相关阅读:
    LeetCode 204
    华为OJ2051-最小的K个数(Top K问题)
    华为OJ1964-求解立方根(牛顿迭代法)
    华为OJ2288-合唱队(最长递增子序列)
    华为OJ2011-最长公共子串
    【Unix编程】进程间通信(IPC)
    可利用空间表(Free List)
    13.10 Scrapy 通用爬虫
    13.9 Scrapy 对接 Splash
    第十四章 分布式爬虫
  • 原文地址:https://www.cnblogs.com/no-celery/p/13802336.html
Copyright © 2011-2022 走看看