小编Sam*_*Axe的帖子

使用Spring ChannelAwareMessageListener时如何处理RabbitMQ使用者取消通知

RabbitMQ的新手和Java新手.

我正在尝试使用java Spring AMQP抽象编写一个使用手动acks并处理消费者取消通知的监听器.我可以使用Spring抽象来完成这两项任务吗?

我想写一个侦听器,它将从队列中提取消息并处理该消息(可能写入数据库或其他东西).我计划使用手动确认,这样如果消息处理失败或由于某种原因无法完成,我可以拒绝并重新排队.到目前为止,我认为我发现为了使用Spring AMQP手动ack/nack/reject,我必须使用ChannelAwareMessageListener.

我意识到我应该从RabbitMQ处理消费者取消通知,但是使用ChannelAwareMessageListener我并没有真正看到为此编码的方法.我看到处理CCN的唯一方法是使用较低级别的Java客户端api编写代码,方法是调用channel.basicConsume()并传递一个DefaultConsumer允许您处理消息传递和取消的新实例.

我还没有看到我会怎样设置clientProperties的ConnectionFactory(告诉我的经纪人能够处理的CCN)因为我在配置一个bean获得工厂.

我的侦听器的伪代码和容器的创建如下.

public class MyChannelAwareListener implements ChannelAwareMessageListener
{
    @Override
    public void onMessage(Message message, Channel channel) throws Exception
    {
        msgProcessed = processMessage(message);

        if(msgProcessed)    
           channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
        else
           channel.basicReject(message.getMessageProperties().getDeliveryTag(), true);  
    }
}

public static void main(String[] args) throws Exception
{
    ConnectionFactory rabbitConnectionFactory;
    ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext   (MY_CONTEXT_PATH);
    rabbitConnectionFactory = (ConnectionFactory)ctx.getBean("rabbitConnectionFactory");

    SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();

    MyChannelAwareListener listener = new MyChannelAwareListener();
    container.setMessageListener(listener);
    container.setQueueNames("myQueue");
    container.setConnectionFactory(rabbitConnectionFactory); …
Run Code Online (Sandbox Code Playgroud)

java amqp rabbitmq spring-amqp

9
推荐指数
1
解决办法
3988
查看次数

标签 统计

amqp ×1

java ×1

rabbitmq ×1

spring-amqp ×1