RabbitMQ收发——spring 集成

上一篇讲了通过原生的AMQP协议去读写Rabbit的方式,这次我们整合到spring中测试一下
首先依旧是连接对象:

protected CachingConnectionFactory getConnectionFactory() {
    //创建连接工厂
    CachingConnectionFactory factory = new CachingConnectionFactory();
    //设置RabbitMQ相关信息
    factory.setHost(host);
    factory.setUsername(account);
    factory.setPassword(password);
    factory.setPort(port);
    factory.setPublisherConfirms(true);
    return factory;
}
//申明两个全局参数
private RabbitTemplate rabbitTemplate;
private RabbitAdmin rabbitAdmin;
public RabbitTemplate getRabbitTemplate() {
    if (rabbitTemplate == null) {
        rabbitTemplate = new RabbitTemplate(getConnectionFactory());
    }
    return rabbitTemplate;
}
public RabbitAdmin getRabbitAdmin() {
    if (rabbitAdmin == null) {
        rabbitAdmin = new RabbitAdmin(getConnectionFactory());
    }
    return rabbitAdmin;
}

初始化这两个成员

public void connect() throws IOException {
    getRabbitTemplate();
    getRabbitAdmin();
}

发送消息:

//type是我业务中的字段,这里我用来模拟添加参数
public boolean sendData(String topicStr, byte[] data, int type) {
    //申明队列,如果队列不存在会进行创建
    getRabbitAdmin().declareQueue(new Queue(topicStr));
    //设置发送参数,这里我们模拟了一个头信息type,如果不需要添加参数,则可以将new MessagePostProcessor内容去除
    //getRabbitTemplate().convertAndSend(topicStr, data);
    getRabbitTemplate().convertAndSend(topicStr, data, new MessagePostProcessor() {
        @Override
        public Message postProcessMessage(Message message) throws AmqpException {
            message.getMessageProperties().setHeader(MessageType.HEAD_FRONT_MESSAGE_TYPE, type);
            return message;
        }
    });
    return true;
}

监听队列

public void getMessage(String topicStr) {
    System.out.println("开始监听");
    SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(getConnectionFactory());
    container.setQueueNames(topicStr);
    //监听回调
    container.setMessageListener(new ChannelAwareMessageListener() {
            @Override
        public void onMessage(Message message, Channel channel) throws Exception {
            byte[] body = message.getBody();
            System.out.println("receive msg : " + new String(body));
            channel.basicAck(message.getMessageProperties().getDeliveryTag(), false); //确认消息成功消费
            messageService.receiveFormMiddleware(body);
        }
    });
    container.start();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值