关于java使用rabbitMq的基本用法
创建连接
public static ConnectionFactory factory;
public static Connection getConnection(String username,String password,String host,int port,String virtualhost) {
if (factory==null){
factory=getFactory(username,password,host,port,virtualhost);
}
try {
return factory.newConnection();
} catch (Exception e) {
throw new RuntimeException("创建rabbit client 连接失败"+e);
}
}
private synchronized static ConnectionFactory getFactory(String username, String password, String host, int port, String virtualhost) {
if (factory!=null)
return factory;
ConnectionFactory factory=new ConnectionFactory();
factory.setUsername(username);
factory.setPassword(password);
factory.setVirtualHost(virtualhost);
factory.setHost(host);
factory.setPort(port);
return factory;
}
因为 这个connection是 长连接,所以不建议每个操作都创建一个connection,因为那样会产生很多额外的网络开销。
创建channel:
Channel channel=connection.createChannel()
通道也是长连接的,但是程序抛出异常时,可能导致通道被关闭,所以它的生命周期要比 connection短点,对每个操作打开和关闭一个通道是可以的(但通常不是必要的)。
尝试消费一个不存在的队列消息,会抛出异常导致channel关闭,channel一旦关闭就不能再使用了,需要创建新的channel。