RabbitMQ知识点整理4-连接RabbitMQ
RabbitMQ Java 客户端使用com.rabbitmq.client 作为顶级包名,关键的Class 和Interface有Channel 、Connection 、ConnectionFactory 、Consumer 等。AMQP 协议层面的操作
通过Channel接口实现。ConnectFactory,Consumer是用来开启Channel(信道)的,可以注册事件处理器,也可以在应用结束时关闭连接。与RabbitMQ 相关的开发工作,基本上也是围绕Connection和Channel 这两个类展开的。接下来会按照一个完整的运转流程进行讲解,详细内容有这几点:连接、交换器/队列的创建与绑定、发送消息、消费消息、消费消息的确认和关闭连接。
通过Channel接口实现。ConnectFactory,Consumer是用来开启Channel(信道)的,可以注册事件处理器,也可以在应用结束时关闭连接。与RabbitMQ 相关的开发工作,基本上也是围绕Connection和Channel 这两个类展开的。接下来会按照一个完整的运转流程进行讲解,详细内容有这几点:连接、交换器/队列的创建与绑定、发送消息、消费消息、消费消息的确认和关闭连接。

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(); } }
注意要点: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 是平级对等关系;
分类:
RabbitMQ教程
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)