RabbitMQ Client 怎么用?

本文详细介绍了如何使用 RabbitMQ client 连接、声明交换器和队列、发送与接收消息,以及消息确认与拒绝。重点讲解了 exchangeDeclare、QueueDeclare、queueBind 等方法的使用,并提醒开发者注意避免在连接状态不确定时进行后续操作。
摘要由CSDN通过智能技术生成

RabbitMQ client 的使用

连接 RabbitMQ
private static Channel _getChannelBySetter() throws IOException, TimeoutException {
   
    ConnectionFactory factory = _getConnectionFactoryBySetter();
    Connection connection = factory.newConnection();
    // channel 不建议线程共享, 多线程使用 Channel 可能造成错误的通信帧交错, 也会影响发送方确认的机制
    return channel = connection.createChannel(); // 可能返回 null
    // Optional<Channel> optionalChannel = connection.openChannel(); // optional 封装 createChannel 的结果

}

private static Channel _getChannelByUri() throws IOException, TimeoutException, NoSuchAlgorithmException, KeyManagementException, URISyntaxException {
   
    ConnectionFactory factory = _getConnectionFactoryByUri();
    Connection connection = factory.newConnection();
    return connection.createChannel();
}

private static ConnectionFactory _getConnectionFactoryBySetter() {
   
    ConnectionFactory factory = new ConnectionFactory();
    factory.setUsername("root");
    factory.setPassword("root");
    factory.setHost("localhost");
    factory.setPort(5672);
    factory.setVirtualHost("/");
    return factory;
}

private static ConnectionFactory _getConnectionFactoryByUri() throws NoSuchAlgorithmException, KeyManagementException, URISyntaxException {
   
    ConnectionFactory factory = new ConnectionFactory();
    factory.setUsername("root");
    factory.setPassword("root");
    factory.setHost("localhost");
    factory.setPort(5672);
    factory.setVirtualHost("/");
    factory.setUri("amqp://root:root@localhost:5672//");
    return factory;
}

connection 或者channel 继承了 isOpen() 可以判断 connection 或 channel 是否正常建立,但是内部使用 Synchronized,,会造成线程竞争
而且依赖的是内部的一个状态值,随时可能被修改。

public boolean isOpen() {
   
    synchronized(this.monitor) {
   
        return this.shutdownCause == null;
    }
}

不能依赖该方法的结果。 作后续处理。除非业务代码也使用锁。

比如像下面的代码&

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值