文章目录
项目前准备:(要求要安装了Docker喔!代码在文章末尾)
1、docker安装rabbitmq,指定版本包含了web控制页面
docker pull rabbitmq:management
2、运行rabbitMq容器
15672是管理Robbit的Web页面的端口,5672是rabbitMq服务器的常用端口
#方式一:默认guest 用户,密码也是 guest
docker run -d --hostname myrabbit --name rabbit -p 15672:15672 -p 5672:5672 rabbitmq:management
#方式二:设置用户名和密码
docker run -d --hostname my-rabbit --name rabbit -e
RABBITMQ_DEFAULT_USER=user -e
RABBITMQ_DEFAULT_PASS=password -p
15672:15672 -p 5672:5672 rabbitmq:management
3、测试连接:
http://你的ID:15672/
出现下面页面就是成功了
4、添加新的交换器:
direct交换器:路由键和Binding中的binding一样,交换器就讲消息发送到对应的队列中,只会发送一模一样的routingkey的队列信息,例如“dog”,就不会再发送“bigdog”
Fanout Exchage :都发送,不需要路由键
Topic Exchange:匹配发送,routing key有“dog”的队列消息都会发送
5、添加新的队列:
Auto:是否自动删除队列
6、添加新的绑定规则:
重新回到Exchange面板,选择刚刚新建的交换器
添加绑定:
绑定成功:如果需要解绑就需要点击Unbind
7、测试消息发送:
点击publish message,添加信息后点击发送
发送后来到queues界面,发现队列消息准备就绪次数发生改变,测试成功。
项目部署
1、新建工程:勾选RabbitMQ
2、添加book实体类:
/**
* Book测试类
*/
public class Book {
private String bookName;
private String author;
public Book() {
}
public Book(String bookName, String author) {
this.bookName = bookName;
this.author = author;
}
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
@Override
public String toString() {
return "Book{" +
"bookName='" + bookName + '\'' +
", author='" + author + '\'' +
'}';
}
}
3、添加自定义消息转换类AMQPConfig:
@Configuration //说明这是一个配置类,类中有我们自定以的配置类方法
public class AMQPConfig {
@Bean //自动注入消息转换器 converter:转换器
//进入MessageConverter接口后,按ctrl+H看实现类
public MessageConverter getMessageConverter(){
return new Jackson2JsonMessageConverter();
}
}
4、在service层中添加服务方法:
@Service
public class Bookservice {
//监听消息
@RabbitListener(queues = "firstQueue")
public void getReceive02(Message message){
System.out.println("信息接收主要内容:"+message.getBody());
System.out.println("信息接收主要属性:"+message.getMessageProperties());
}
}
主要结构如下:
5、在测试类中添加测试方法:(这里可以添加Junit4依赖进行测试,我这里IDEA直接自动添加了)
首先在application.properties文件添加rabbitMQ的配置信息:
#rabbitmq的相关配置信息
spring.rabbitmq.host=你的IP
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.rabbitmq.port=5672
在主类中添加:
@EnableRabbit //开启基于注解的RabbitMq模式
测试方法一:发送数据
@Test //单播
void test01(){
Map<String,Object> map = new HashMap<>();
map.put("msg","这是第一个书籍信息");
//添加数据,字符型、整型、boolean类型
map.put("data", Arrays.asList("helloVinda!",666,true));
//对象被默认序列化以后发送出去
rabbitTemplate.convertAndSend("firstExchange","first"
,new Book("十万个为什么","Vinda"));
}
测试成功:被访问两次,web管理显示被管理两次,getMessage获得消息
测试方法二:接收数据
@Test //接收信息,接收后queue里面的值会被清空
void test02(){
//对应的队列名称要写正确
Object obj = rabbitTemplate.receiveAndConvert("firstQueue");
System.out.println(obj.getClass());
System.out.println(obj);
}
数据被清空:
测试方法三:监听数据,成功
测试方法四:使用AmqpAdmin去创建路由交换器,创建绑定规则
//添加Amqp管理员,用于创建路由交换器,创建绑定规则
@Autowired
private AmqpAdmin amqpAdmin;
/*创建交换机、队列信息和绑定规则*/
@Test
public void createExchange(){
//declare:声明,声明新的路由器
amqpAdmin.declareExchange(new DirectExchange("test.Exchange"));
//declare:声明,声明新的队列消息
amqpAdmin.declareQueue(new Queue("test.queue",true));
//declare:声明,声明新的绑定规则
/**
String destination : 需要绑定的队列信息
Binding.DestinationType destinationType : 绑定队列的类型
String exchange :需要绑定的交换器
String routingKey :发送的路由键
*
*/
amqpAdmin.declareBinding(new Binding("test.queue", Binding.DestinationType.QUEUE,
"test.Exchange","test",null));
}
测试结果:
总结
本人借助B站上的雷神解说的Springboot视频,完成了Springboot和RabbitMQ项目简单整合,全程手打为了自己能更好的记住相关知识点,理解这些知识是怎么整合的,如有理解不当欢迎留言,长路漫漫,继续加油把!
雷神Springboot学习视频:Springboot+RabbitMQ
我的代码地址:点我去我的Github