首先引入相关依赖:
java
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
配置applicaiton.yml:
XML
server:
port: 8082
spring:
rabbitmq:
host: 192.168.37.105
port: 5672
username: admin
password: admin
virtual-host: /
shop:
exchange: shop.exchange.direct
queue: shop.queue
routingKey: shop.routingKey
编写配置类RabbitMqConfig:
java
@Configuration
public class RabbitmqConfig {
@Value("${shop.exchange}")
private String exchange;
@Value("${shop.queue}")
private String queue;
@Value("${shop.routingKey}")
private String routingKey;
@Bean
public Exchange getExchange(){
return new DirectExchange(exchange);
}
@Bean
public Queue getQueue(){
return new Queue(queue);
}
@Bean
public Binding binding(Exchange exchange,Queue queue){
return BindingBuilder.bind(queue).to(exchange).with(routingKey).noargs();
}
/**
* 消息转化器
* 将对象转化为 Json 字符串
*/
@Bean
public MessageConverter messageConverter(){
return new Jackson2JsonMessageConverter();
}
}
如果不配置消息转化器,默认只能处理字符串消息。不能处理对象!!!
创建生产者:
java
@RestController
@RequiredArgsConstructor
@RequestMapping("producer02")
public class Producer02Controller {
@Value("${shop.exchange}")
private String exchange;
@Value("${shop.routingKey}")
private String routingKey;
private final RabbitTemplate rabbitTemplate;
@GetMapping("/send")
public String sendMsg(){
rabbitTemplate.convertAndSend(exchange,routingKey,new Student(2,"Alice","178",20));
return "Producer02==>发送成功!";
}
}
创建消费者(获取消息):
java
@Component
public class MegListener {
@RabbitListener(queues = "${shop.queue}")
public void readStu(String msg) {
System.out.println("shop.queue:" + msg);
}
@RabbitListener(queues = "${shop.queue}")
public void readStu(Student stu) {
System.out.println("shop.queue:" + stu);
}
}
创建实体类:
java
@AllArgsConstructor
@NoArgsConstructor
@Data
public class Student implements Serializable {
private Integer id;
private String name;
private String phone;
private Integer age;
}
进行测试: