Spring boot + RabbitMq

倾然丶 夕夏残阳落幕 提交于 2019-12-22 17:53:17

消息发送者

在这里插入图片描述

导入依赖

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.1.RELEASE</version>
  </parent>
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-amqp</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
  </dependencies>

配置文件

spring:
  application:
    name: test‐rabbitmq‐producer
rabbitmq:
  host: 127.0.0.1
  port: 5672
  username: guest   // rabbit 登录账号
  password: guest   // rabbit 登录密码
  virtualHost: /
server:
  port: 8888

配置类


@Configuration
public class RabbitMqConfig {
    public static final String QUEUE_NAME = "queue_test";   // 队列名
    public static final String EXCHANGE_NAME = "exchange_test"; // 交换机名
    public static final String ROUTING_KEY = "test.*";  // ROUTING_KEY  

    // 配置交换机
    @Bean(EXCHANGE_NAME)
    public Exchange exchange(){
        // ExchangeBuilder.fanoutExchange(EXCHANGE_NAME); fanout 类型交互机
        // ExchangeBuilder.directExchange(EXCHANGE_NAME); direct 类型交互机
        // ExchangeBuilder.headersExchange(EXCHANGE_NAME); headers 类型交互机
                                                         //durable(true)  持久化 消息队列重启后 交换机仍然存在
        return ExchangeBuilder.topicExchange(EXCHANGE_NAME).durable(true).build();
    }

    // 配置队列
    @Bean(QUEUE_NAME)
    public Queue queue(){
        Queue queue = new Queue(QUEUE_NAME);
        return queue;
    }

    // 绑定队列到交换机
    @Bean
    public Binding binding(@Qualifier(QUEUE_NAME)Queue queue,@Qualifier(EXCHANGE_NAME)Exchange exchange){
        return BindingBuilder.bind(queue).to(exchange).with(ROUTING_KEY).noargs();
    }
}

发送消息

@SpringBootTest
@RunWith(SpringRunner.class)
public class AppTest {
    @Autowired
    RabbitTemplate rabbitTemplate;
    @Test
    public void shouldAnswerWithTrue() {
        for (int i = 0; i < 10; i++){
            String message = "hello word" + i;
            rabbitTemplate.convertAndSend(RabbitMqConfig.EXCHANGE_NAME,"test.hehe",message);
            System.out.println("Send Message " + message);
        }
    }
}

打开浏览器输入 http://localhost:15672/ 输入账号密码

在这里插入图片描述
点击Exchanges 可以看到配置的交互机名称
在这里插入图片描述
点击Queues 队列 可以看到配置的队列名称
在这里插入图片描述
点击 queue_test
在这里插入图片描述

消息接收者

从消息发送者copy RabbitMqConfig配置类
在这里插入图片描述

创建消息监听类

@Component
public class ReceiveHandler {
    // 监听队列
    @RabbitListener(queues = {RabbitMqConfig.QUEUE_NAME})
    public void listenerQueue(String msg){
        System.out.println(msg);
    }
}

启动消费者

控制台输出
在这里插入图片描述
因为消息队列里面有10条消息未消费 启动消费者后 消费者监听到消息队列里的消息 会自动消费

刷新队列 消息已消费
在这里插入图片描述

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!