创建消费者子模块
在父项目中,创建消费者子模块:consumer
略
pom.xml
由于父项目已引入所有依赖包,所以pom.xml中不做任何修改
application.yml
在 resources 目录下创建 application.yml 文件,内容如下:
server:
port: 8002
spring:
application:
#服务名称
name: rabbitmq-consumer-a
#RabbitMQ的配置
rabbitmq:
host: 127.0.0.1
port: 5672
username: guest
password: guest
创建 RabbitMQ 监听器
启动服务后,自动从消息队列中取出消息
package org.malaoshi.rabbitmq;
import com.rabbitmq.client.Channel;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
public class ConsumerListener {
public static final String NOTICE="notice";
//注册监听器,并指定消息队列名称
// @RabbitListener(queues = NOTICE) //需要实现创建队列,否则报错
@RabbitListener(queuesToDeclare = @Queue(NOTICE))//自动创建队列
public void receiveMsg(String msg, Channel channel, Message message){
//msg:字符串消息
System.out.println("收到消息:" + msg);
System.out.println("channel通道编号为:" + channel.getChannelNumber());
//可以通过Message对象,获取消息正文
System.out.println("收到消息:" + new String(message.getBody()));
}
}
事先创建队列
使用下面注解,需要事先创建好队列,否则报错:
@RabbitListener(queues = NOTICE)
自动创建队列
使用下面注解,会自动创建队列:
@RabbitListener(queuesToDeclare = @Queue(NOTICE))
主启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Main {
public static void main(String[] args) {
SpringApplication.run(Main.class, args);
}
}
启动服务
启动主启动类
控制台会打印接收到的消息:
收到消息:abc
channel通道编号为:1
收到消息:abc
访问 rabbitmq web管理页面
此时创建 消息队列 notice 了
