RabbitMQ-01-每一步都是坑

01:主机无法访问虚拟机MQ

查询指定端口是否已开

firewall-cmd --query-port=15672/tcp

添加指定需要开放的端口: 

firewall-cmd --add-port=15672/tcp --permanent

重载入添加的端口: 

firewall-cmd --reload

查询指定端口是否开启成功: 

firewall-cmd --query-port=15672/tcp

移除指定端口:

firewall-cmd --permanent --remove-port=15672/tcp

查询开放的防火墙列表

firewall-cmd --zone=public --list-ports

2:com.rabbitmq.client.ShutdownSignalException: connection error

在使用浏览器可以访问,但是用程序就访问不到了。是因为浏览器访问的端口是15672。

但是用java程序连接,端口就变成了5672。

所有需要在linux中,将5672端口开放。

开放 5672端口

firewall-cmd --add-port=5672/tcp --permanent

重载入添加的端口: 

firewall-cmd --reload

03:第二次接受到发送的MQ 后,发现消费获取了两个值,队列中的两个没有删除。

原因是因为MQ默认的是手动应答机制,所以要使用 autoAck = true

下面的API 是 手动应答机制

/**
     * Start a non-nolocal, non-exclusive consumer, with
     * explicit acknowledgement and a server-generated consumerTag.
     * Provide access only to <code>basic.deliver</code> and
     * <code>basic.cancel</code> AMQP methods (which is sufficient
     * for most cases). See methods with a {@link Consumer} argument
     * to have access to all the application callbacks.
     * @param queue the name of the queue
     * @param deliverCallback callback when a message is delivered
     * @param cancelCallback callback when the consumer is cancelled
     * @return the consumerTag generated by the server
     * @throws IOException if an error is encountered
     * @see com.rabbitmq.client.AMQP.Basic.Consume
     * @see com.rabbitmq.client.AMQP.Basic.ConsumeOk
     * @see #basicAck
     * @see #basicConsume(String, boolean, String, boolean, boolean, Map, Consumer)
     * @since 5.0
     */
    String basicConsume(String queue, DeliverCallback deliverCallback, CancelCallback cancelCallback) throws IOException;

应使用下面API 并将 autoAck = true

/**
     * Start a non-nolocal, non-exclusive consumer, with
     * a server-generated consumerTag.
     * Provide access only to <code>basic.deliver</code> and
     * <code>basic.cancel</code> AMQP methods (which is sufficient
     * for most cases). See methods with a {@link Consumer} argument
     * to have access to all the application callbacks.
     * @param queue the name of the queue
     * @param autoAck true if the server should consider messages
     * acknowledged once delivered; false if the server should expect
     * explicit acknowledgements
     * @param deliverCallback callback when a message is delivered
     * @param cancelCallback callback when the consumer is cancelled
     * @return the consumerTag generated by the server
     * @throws IOException if an error is encountered
     * @see com.rabbitmq.client.AMQP.Basic.Consume
     * @see com.rabbitmq.client.AMQP.Basic.ConsumeOk
     * @see #basicAck
     * @see #basicConsume(String, boolean, String, boolean, boolean, Map, Consumer)
     * @since 5.0
     */
    String basicConsume(String queue, boolean autoAck, DeliverCallback deliverCallback, CancelCallback cancelCallback) throws IOException;

修改代码

        /**
         * 消费者消费消息
         * 1.消费哪个队列
         * 2.消费成功之后是否要自动应答 true 代表自动应答 false 手动应答
         * 3.消费者成功消费回的调
         * 4.消费者未成功消费的回调
         */
        channel.basicConsume(RabbitMQUtils.QUEUE_NAME, true, deliverCallback, cancelCallback);


 


作者:Darren

QQ:603026148

以上内容归Darren所有,如果有什么错误或者不足的地方请联系我,希望我们共同进步。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

从码农到码到成功

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值