SpringBoot 中使用RabbitMQ,发送消息后,是否应该把发送的消息保存起来?

如题所示,按照网上的教程,大致代码如下

生产者部分代码如下

 public void sendMessage(MessageQueue messageQueue,String type){
        String exchange = null;
        String routingKey = null;
        switch (type){
            case "article":
                exchange = MQConfig.exchange_article;
                routingKey = MQConfig.routing_key_article;
                break;
            case "answer":
                exchange = MQConfig.exchange_comment_reply;
                routingKey = MQConfig.routing_key_comment_reply;
                break;
            case "all":
                // ............
                break;
            default:
                log.error("无效的 type 信息,无法生产消息");
                return;
        }
        CorrelationData correlationId = new CorrelationData(UUID.randomUUID().toString());
        rabbitTemplate.convertAndSend(exchange, routingKey, messageQueue, correlationId);
    }

消费者代码如下

@Slf4j
@Component
public class MQConsumer {

    @RabbitListener(queues = MQConfig.queue_article)
    @RabbitHandler
    public void ArticleReceiver(@Payload MessageQueue message){
        log.info("-------------------- 有新文章发布 ---------------------");
        log.info("接收到的消息:"+message);
    }

    @RabbitListener(queues = MQConfig.queue_comment_reply)
    @RabbitHandler
    public void CommentAndReplyReceiver(@Payload MessageQueue message){
        log.info("-------------------- 有新的评论和回复 ---------------------");
        log.info("接收到的消息:"+message);
    }
}

测试代码如下

    @Test
    public void contextLoads() {
        MessageQueue messageQueue = new MessageQueue();
        messageQueue.setId("1").setContent("发送类型 article");
        mqProducer.sendMessage(messageQueue,"article");

        messageQueue.setId("2").setContent("发送类型answer");
        mqProducer.sendMessage(messageQueue,"answer");
    }

代码无问题,目前对该工具的用法有几个疑问,希望了解的人能帮忙回答下

1. MQ的设置,是不是只能固定交换机,消息队列,有没有可能值设置不同种类的交换机,交换机和routingkey由发送类型来决定

2. 发送成功后,消息是不是要保存起来?因为消费者好像是直接输出了生产者送来的信息,如果我要自己手动获取信息,又该怎么获取?像思否的这样,有人回复你,就发个消息给你,点击后又怎么处理

新手问题有点多,麻烦有耐心的朋友能提点一下,感激不尽

阅读 4k
1 个回答

1.没太明白什么意思,"交换机和routingkey由发送类型来决定"???设置多种交换器和rootingKey及对应Queue,发送消息时选择合适的交换器不行吗?
2.消息保不保存由需求来决定,你可以在消费端接收到消息后存到数据库
消费端获取消息的方式有两种:

2.1 推模式
    顾名思义,就是RabbitMQ主动推送消息到消费端
2.2 拉模式
    就是消费端主动去RabbitMQ拉取消息

手动获取消息就用拉模式

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题