RabbitMQ知識點整理4-連線RabbitMQ
阿新 • • 發佈:2020-10-12
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;View Codeimport 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() throwsIOException, 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:[email protected]:5672/"); // Connection connectioin = connectionFactory.newConnection(); // 建立通道 Channel channel = connectioin.createChannel(); } }
注意要點:Connection 可以用來建立多個Channel 例項, 但是Channel 例項不能線上程問共享, 應用程式應該為每一個執行緒開闢一個Channel
Channel和Connection中有個isOpen方法可以用來檢測其是否已處於開啟狀態, 但是不推薦在生產環境中使用此方法. 通常在呼叫createXXX或newXXX方法之後, 我們可以簡單的認為Connection或Channel已經處於開啟狀態, 而不會使用isOpen方法, 如果在使用Channel的時候其處於關閉狀態, 那麼程式會丟擲一個com.rabbitmq.client.ShutdownSignalException, 我們只需要捕獲這個異常即可, 當然同時也要試著捕獲IOException或者SocketException, 以防Connection意外關閉。