1.创建了两个项目 :
(1)rabbitmq-send 消息发送者
(2)rabbitmq-receive 消息接受者
2. 添加rabbitmq依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.7</version>
</dependency>
3.编写具体的消息发送者
(1)配置application.yml
server:
port: 8980
spring:
application:
name: rabbitmq-send
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
#不分配端口,默认使用8080
(2)创建rabbitmq配置类,添加一个名为hello的队列
@Configuration
public class RabbitConfig {
public final static String QUEUE_NAME = "hello";
@Bean
public Queue helloQueue(){
return new Queue(QUEUE_NAME);
}
}
(3)编写具体的发送组件
先创建一个user实体类,属性id、name、age。
/**
* @Title:消息发送者
*/
@Component
public class Sender {
//通过注入的这个类来传递消息
@Autowired
private AmqpTemplate rabbitTemplate;
public void send(){
// 传输集合
/*
* List<User> userList = new ArrayList<>(); for (int i = 1; i <= 10; i++) { User
* user = new User(i, "user"+i, (i+10)); userList.add(user); } String jsonString
* = JSON.toJSONString(userList); System.out.println("Sender :"+ jsonString);
* this.rabbitTemplate.convertAndSend("hello",jsonString);
*/
// 传输实体类
User user = new User(new Random().nextInt(10)+1, "tom", new Random().nextInt(30)+1);
String userString = JSON.toJSONString(user);
System.out.println("Sender :"+ userString);
this.rabbitTemplate.convertAndSend(RabbitConfig.QUEUE_NAME,userString);
}
}
(4)创建一个访问接口,用以发送消息
/**
* @Title:发送消息的接口
*/
@RestController
public class SendController {
@Resource
private Sender sender;
@GetMapping("send")
public String send(){
sender.send();
return "消息已发送..";
}
}
4. 编写具体的消息接受者
(1)application.yml
spring:
application:
name: rabbitmq-receive
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
server:
port: 8981
(2)编写消息接受者组件‘
@RabbitListener定义在类表示此类是消息监听者并设置要监听的队列
@RabbitHandler:在类中可以定义多个@RabbitHandler,spring boot会根据不同参数传送到不同方法处理
package org.lhj.pro.receive;
import org.lhj.pro.config.RabbitConfig;
import org.lhj.pro.entity.User;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
import com.alibaba.fastjson.JSONObject;
/**
* @author luhongjun
* @Title:消息接受者
* @Description:
* @date 2019/11/26
*/
@Component
//监听hello队列
@RabbitListener(queues = RabbitConfig.QUEUE_NAME)
public class Receive {
//处理接受到的消息
@RabbitHandler
public void process(String jsonString){
// 接收json集合字符串,转换成集合
/*
* List<User> parseArray = JSON.parseArray(jsonString, User.class); for (User
* user : parseArray) { System.out.println("Receiver:"+user); }
*/
// 接收json实体类字符串,转换成实体
User user = JSONObject.parseObject(jsonString, User.class);
System.out.println("Receiver:"+user);
}
}
5. 测试
(1)启动消息发送者,多次访问http://localhost:8980/send
前端返回
消息已发送 ...
控制台输出:
注意这时候我们还没有启动消息接受者,所有发送的消息都在消息队列里面
可以访问 http://localhost:15672/ 查看rabbitmq的管理页面
我们可以看到消息队列里面有1条消息
(2)我们启动消息接受者应用
可以看到应用启动好以后,接收到了消息,控制台输出
我们再次访问http://localhost:15672
发现队列此时已经没有消息.
这样一个简单的RabbitMQ应用就完成了.