前面几章内容已经介绍了rabbitMq安装和使用,这一节直接进入正题,进行springboot的整合吧!
1.pom文件添加maven配置
<!-- rabbit mq -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
2.properties文件配置
里面做了详细的解释,哪些是整合springboot必须的配置我也做了标注!
#################rabbit mq###################
####springboot需要知道,我们的host,端口号,用户名,密码,vhost足以
spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.username=test
spring.rabbitmq.password=test
spring.rabbitmq.virtualHost=springboot
##################下面的配置是程序中使用的变量配置,与springboot整合rabbit mq无关#########
#换句话说就是专门改到一个配置类里面进行管理,前面文章也说过怎么获取配置文件的值,这里就不做过多的说明了
#我们在进行rabiitmq初始讲解的时候,说过这样一句话: exchange是我们的一层封装,客户端(生产者)不能够直接接触到我们的queue,只能通过exchage进行消息的转发
#对于生产者而言,不需要知道我们的queue是什么,只需要知道我们的exchange的bingding-key的规则即可。
#消费者进行消息的消费,我们的消费者只需要知道 queue是谁就行了。
#总结:我们的生产者,需要知道exchange和bingding的规则;消费者只需要知道queue的名称即可
loader.rabbitMq.exchange=springboot.queue.exchange
loader.rabbitMq.routeKey=springboot.route
#消费者只需要知道queue的名称即可
loader.rabbitMq.queue=springboot.queue
3.老规矩配置类编写(这块有点类似redis)
package com.lengmo.config;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RabbitConfig {
@Bean
public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);//处理连接问题
rabbitTemplate.setMessageConverter(new Jackson2JsonMessageConverter());//处理序列化问题
return rabbitTemplate;
}
}
4.controller文件的编写
里面有消息的发送和接受,只是做个简单的demo,实际项目中的使用,大家还是按需进行吧!
package com.lengmo.controller;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/rabbit")
public class RabbitController {
@Autowired
private RabbitTemplate rabbitTemplate;
//这里几个参数的获取我们可以改为获取配置文件的方法,具体的方法在之前的文章中也有说明,这里只做演示,一切从简
@Value("${loader.rabbitMq.exchange}")
private String exchange ;
@Value("${loader.rabbitMq.routeKey}")
private String routingKey;
@Value("${loader.rabbitMq.queue}")
private String queue;
@RequestMapping("/send")
public String send(@RequestParam(name="msg")String msg) {
//String string = "Hello World!";
// rabbitTemplate.send(null);
//对于send方法,我们需要包装Message类: 1. 包装message body,需要进行字节数组转换 2. 确定message的各种
//properties ,比如说消息级别(在特殊情况下,如果message的属性很多,我们通常建议使用我们的send方法。比如说:
//需要通过对消息的级别进行消息的处理方法或者处理时间)。(send方法,不常用,1:不好组装;2 我们有自己的jdk实现的优先级队列)
rabbitTemplate.convertAndSend(exchange, routingKey, msg);
System.out.println("send success!");
return msg+"=======send success!";
}
@RequestMapping("/get")
public String get() {
// Message res = rabbitTemplate.receive();
// 与我们上方的send方法进行对比记忆学习。
Object object = rabbitTemplate.receiveAndConvert(queue);
String msg="get success!" + "content:" + String.valueOf(object);
System.out.println(msg);
return msg;
}
}
5.整合完成后我们做个验证吧
5.1发送消息
http://localhost:8080/rabbit/send?msg=woshiceshi1
http://localhost:8080/rabbit/send?msg=woshiceshi2
http://localhost:8080/rabbit/send?msg=woshiceshi3
http://localhost:8080/rabbit/send?msg=woshiceshi4
发送过后我们看一下web端的管理平台有啥变化!
5.2获取一下消息
http://localhost:8080/rabbit/get 执行三次,我们看一下管理端的变化,消息有没有减少啊?怎么减少的呢(是否满足先进先出的原则呢?)?
5.3看一下后台,是否满足先进先出的原则
从下图我们可以清晰的看到入的规则是按照顺序进去的,然后出的顺序也是满足先进先出的原则
总结:至此我们对rabbitMq的简单操作已经完成,是不是还挺开心的呢?哈哈,学习使人进步,老规矩,感谢一下王军伟老师的精彩课程,让我获益良多啊!