4RabbitMQ使用 · SpringCloud微服务实战 · 看云

导航

本节代码地址


浏览器打开RabbitMQ 客户端,可以自己先熟悉熟悉使用
尝试建一个fwcloud用户
c7d44535745786f3cf62d16306fa64e4_MD5.webp

点击fwcloud用户设置权限
2fcc7f6c1df5d82c68f35d779efda47e_MD5.webp

下面通过一个SpringBoot 整合RabbitMQ 的例子熟悉一下RabbitMQ的功能

1. 新建项目

用于测试Rabbit 的基本功能
24efb82b6287b854a83f03411080d469_MD5.webp

1.1 maven配置

需要引入spring-boot-starter-amqp的包,封装了RabbitMQ 的API。

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <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>

1.2 新建启动类

@SpringBootApplication
public class FwRabbitMqApplication {
    public static void main(String[] args) {
        SpringApplication.run(FwRabbitMqApplication.class, args);
    }
}

1.3 新建RabbitMQ配置

使用MQ前,我们需要设置一个Topic ,还可以配置交换器、路由等信息,我们这里以简单使用为主。


@Configuration
public class RabbitMqConfig {

    
    @Bean
    public Queue helloQueue(){
        return  new Queue("hello");
    }
}

1.4 应用配置信息

设置RabbitMQ 连接配置信息,这里设置的用户是我们刚刚创建的fwcloud用户

server:
  port: 8781
spring:
  application:
    name: fw-cloud-mq-rabbitmq
  rabbitmq:
    host: localhost
    port: 5672
    username: fwcloud
    password: fwcloud

1.5 创建消息生产者

通过注入AmqpTemplate 来发送我们自定义产生的消息,AmqpTemplate 已经为我们定义了一套AMQP协议的基本操作。我们也将信息通过log日志打印出来


@Component
@Slf4j
public class FwSender {

    @Autowired
    private AmqpTemplate amqpTemplate;

    public void send(){
      String message="Hello World:"+ DateUtil.now();
      log.info("FwSender:"+message);
      
      amqpTemplate.convertAndSend("hello",message);
    }
}


1.6 创建消息消费者

通过定义@RabbitListener来监听topic为hello的消息,并且通过@RabbitHandler来指定消息的处理。


@Component
@RabbitListener(queues = "hello")
@Slf4j
public class FwReceiver {

    @RabbitHandler
    public void process(String msg){
        log.info("FwReceiver:{}",msg);
    }
}

1.7 启动项目

启动之后,程序创建了一个和127.0.0.1:5672的连接,用户名是fwcloud

2019-12-18 14:56:16 INFO  main org.springframework.amqp.rabbit.connection.CachingConnectionFactory Attempting to connect to: [localhost:5672]
2019-12-18 14:56:16 INFO  main org.springframework.amqp.rabbit.connection.CachingConnectionFactory Created new connection: rabbitConnectionFactory#7a583586:0/SimpleConnection@33f17289 [delegate=amqp://fwcloud@127.0.0.1:5672/, localPort= 51546]

通过RabbitMQ 的web 管理可以看到Connections和Channels连接信息

1.7.1. Connections

c0967c69e74b49706ef7c93fcd6ad755_MD5.png

1.7.2. Channels

c4ee11a92f7c1a49d93cc93f0f684920_MD5.png

1.8. 单元测试 发送数据sender()

2019-12-18 14:49:37.501  INFO 28284 --- [           main] com.yisu.mq.rabbitmq.sender.FwSender     : FwSender:Hello World:2019-12-18 14:49:37
2019-12-18 14:49:37.513  INFO 28284 --- [           main] com.yisu.mq.rabbitmq.sender.FwSender     : FwSender:Hello World:2019-12-18 14:49:37
2019-12-18 14:49:37.514  INFO 28284 --- [           main] com.yisu.mq.rabbitmq.sender.FwSender     : FwSender:Hello World:2019-12-18 14:49:37
2019-12-18 14:49:37.514  INFO 28284 --- [           main] com.yisu.mq.rabbitmq.sender.FwSender     : FwSender:Hello World:2019-12-18 14:49:37
2019-12-18 14:49:37.515  INFO 28284 --- [           main] com.yisu.mq.rabbitmq.sender.FwSender     : FwSender:Hello World:2019-12-18 14:49:37
2019-12-18 14:49:37.515  INFO 28284 --- [           main] com.yisu.mq.rabbitmq.sender.FwSender     : FwSender:Hello World:2019-12-18 14:49:37
2019-12-18 14:49:37.515  INFO 28284 --- [           main] com.yisu.mq.rabbitmq.sender.FwSender     : FwSender:Hello World:2019-12-18 14:49:37
2019-12-18 14:49:37.516  INFO 28284 --- [           main] com.yisu.mq.rabbitmq.sender.FwSender     : FwSender:Hello World:2019-12-18 14:49:37
2019-12-18 14:49:37.516  INFO 28284 --- [           main] com.yisu.mq.rabbitmq.sender.FwSender     : FwSender:Hello World:2019-12-18 14:49:37
2019-12-18 14:49:37.517  INFO 28284 --- [           main] com.yisu.mq.rabbitmq.sender.FwSender     : FwSender:Hello World:2019-12-18 14:49:37


1.9. 队列已经存在

dfea0372653ae439ed5f5794039b3e85_MD5.png

1.10. 接收端数据

2019-12-18 15:00:44 INFO  org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#0-1 com.yisu.mq.rabbitmq.consumer.FwReceiver FwReceiver:Hello World:2019-12-18 15:00:43
2019-12-18 15:00:44 INFO  org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#0-1 com.yisu.mq.rabbitmq.consumer.FwReceiver FwReceiver:Hello World:2019-12-18 15:00:43
2019-12-18 15:00:44 INFO  org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#0-1 com.yisu.mq.rabbitmq.consumer.FwReceiver FwReceiver:Hello World:2019-12-18 15:00:43
2019-12-18 15:00:44 INFO  org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#0-1 com.yisu.mq.rabbitmq.consumer.FwReceiver FwReceiver:Hello World:2019-12-18 15:00:43
2019-12-18 15:00:44 INFO  org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#0-1 com.yisu.mq.rabbitmq.consumer.FwReceiver FwReceiver:Hello World:2019-12-18 15:00:43
2019-12-18 15:00:44 INFO  org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#0-1 com.yisu.mq.rabbitmq.consumer.FwReceiver FwReceiver:Hello World:2019-12-18 15:00:43
2019-12-18 15:00:44 INFO  org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#0-1 com.yisu.mq.rabbitmq.consumer.FwReceiver FwReceiver:Hello World:2019-12-18 15:00:43
2019-12-18 15:00:43 INFO  org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#0-1 com.yisu.mq.rabbitmq.consumer.FwReceiver FwReceiver:Hello World:2019-12-18 15:00:43
2019-12-18 15:00:44 INFO  org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#0-1 com.yisu.mq.rabbitmq.consumer.FwReceiver FwReceiver:Hello World:2019-12-18 15:00:43
2019-12-18 15:00:44 INFO  org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#0-1 com.yisu.mq.rabbitmq.consumer.FwReceiver FwReceiver:Hello World:2019-12-18 15:00:43

上面只是演示了最简单的收发模式,RabbitMQ还有跟多特性(订阅模式、路由模式、RPC模式等),读者可以到官网查看:https://www.rabbitmq.com,也可以购买书籍阅读。