如题所示,按照网上的教程,大致代码如下
生产者部分代码如下
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. 发送成功后,消息是不是要保存起来?因为消费者好像是直接输出了生产者送来的信息,如果我要自己手动获取信息,又该怎么获取?像思否的这样,有人回复你,就发个消息给你,点击后又怎么处理
新手问题有点多,麻烦有耐心的朋友能提点一下,感激不尽
1.没太明白什么意思,"交换机和routingkey由发送类型来决定"???设置多种交换器和rootingKey及对应Queue,发送消息时选择合适的交换器不行吗?
2.消息保不保存由需求来决定,你可以在消费端接收到消息后存到数据库
消费端获取消息的方式有两种:
手动获取消息就用拉模式