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);
    }
}

# To Be Continued!😎

Last Updated: 4/7/2021, 11:50:51 PM