在pom.xml
文件中写入依赖配置
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-amqp -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
在启动类上写入相关注解和配置
开启RabbitMQ的使用
@EnableRabbit
@EnableCaching
@EnableFeignClients(basePackages = "dev.painaodai.cloud.member.feign")
@EnableDiscoveryClient
@SpringBootApplication
public class PainaodaiCloudMemberApplication {
public static void main(String[] args) {
SpringApplication.run(PainaodaiCloudMemberApplication.class, args);
}
}
配置相关配置文件
spring:
rabbitmq:
host: 192.168.5.101
port: 5672
virtual-host: /
加入配置类,使其使用json格式的数据进行传输
@Configuration
public class CustomRabbitConfig {
@Bean
MessageConverter messageConverter(){
return new Jackson2JsonMessageConverter();
}
}
// 注入RabbitMQ管理类,进行交换机、队列的声明,交换机和队列的绑定,声明和绑定是发送消息的前置条件
@Autowired
private AmqpAdmin amqpAdmin;
// 创建直接交换机
void createExchange() {
// name:交换机的名称
// durable:交换机是否持久化,保证rabbit关闭之后再打开依然存在
// autoDelete:是否自动删除
// arguments:相关自定义参数
// public DirectExchange(String name, boolean durable, boolean autoDelete, Map<String, Object> arguments)
DirectExchange directExchange = new DirectExchange("hello-exchange", true, false);
amqpAdmin.declareExchange(directExchange);
}
// 创建队列
void createQueue(){
// name:队列的名称
// durable:队列是否持久化
// exclusive:是否排他,应该都不排他
// autoDelete:是否自动删除
// arguments: 自定义参数
// public Queue(String name, boolean durable, boolean exclusive, boolean autoDelete:, @Nullable Map<String, Object> arguments)
Queue queue = new Queue("hello-queue", false, false, false);
amqpAdmin.declareQueue(queue);
}
// 绑定交换机和队列
void createBinding(){
// destination:目的地,这里选择队列名称
// destinationType:目的地的类型,这里的类型是队列
// exchange:交换机的名称
// routingKey:路由件,类似于绑定的名称
// arguments:自定义参数
// public Binding(String destination, Binding.DestinationType destinationType, String exchange:, String routingKey, @Nullable Map<String, Object> arguments)
Binding binding = new Binding("hello-queue", Binding.DestinationType.QUEUE, "hello-exchange", "hello.java", null);
amqpAdmin.declareBinding(binding);
}
// 引入消息发送依赖
@Autowired
private RabbitTemplate rabbitTemplate;
// 发送消息
void sendMessage(){
SysUser sysUser = new SysUser();
sysUser.setId(UUID.randomUUID().toString());
sysUser.setUsername("PanBitch");
sysUser.setPassword("PanBitch's password 123");
rabbitTemplate.convertAndSend("hello-exchange", "hello.java", sysUser);
}
// 接收消息
// 这里使用RabbitListener注解进行消息的接收监听
// RabbitListener可以注解在类上面,也可以注解在方法上面。
// 若注解在类上面,则在方法上面注解RabbitHandler,RabbitMQ会根据RabbitHandler注解的相关类型,自动进行对应方法的调用
@Slf4j
@Service
public class RabbitMessageReciveListener {
// 监听的队列名称
@RabbitListener(queues = {"hello-queue"})
// message:会返回消息的相关信息
// sysUser:会将消息内容自动转换为对应实体
// channel(com.rabbitmq.client.Channel):后面用于消息的确认
public void reviceMessageListener(Message message, SysUser sysUser:, Channel channel,){
log.info("接收到消息,内容:{},类型:{}", message, sysUser);
}
}