rabbitmq学习(五):springboot整合rabbitmq

一、Springboot对rabbitmq的支持

springboot提供了对rabbitmq的支持,并且大大简化了rabbitmq的相关配置。在springboot中,框架帮我们将不同的交换机划分出来,这样使我们的编程变得更加清晰易于理解。

所需要的依赖为:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

二、代码实现

1.创建springboot项目

我的项目目录如下:

 

 

 

2.代码实现

1.在springboot中,rabbitmq的连接信息配置在application.properties中

spring.rabbitmq.host=localhost
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.rabbitmq.port=5672
//直连交换机的确认机制
spring.rabbitmq.listener.direct.acknowledge-mode=auto

 2.先在配置类中声明队列、交换机以及交换机和队列的绑定关系。下面配置为直连交换机的配置

/**
 * 基础配置类
 */
@Configuration("directRabbitConfig")
public class RabbitConfig {
    /**
     * 定义队列
     * @return
     */
    @Bean
    public Queue queue(){
        return new Queue("directQueue",false,false,false);
    }

    /**
     * 定义直连交换机
     * @return
     */
    @Bean
    public DirectExchange directExchange(){
        return new DirectExchange("directExchange",false,false);
    }

    /**
     * 定义交换机和队列之间的绑定关系
     * @return
     */
    @Bean
    public Binding binding(){
        return BindingBuilder.bind(queue()).to(directExchange()).with("directRoutingKey");
    }
}

 3.消费者代码

/**
 * 消费者
 */
@Component
public class DirectConsumer {
    /**
     * 监听directQueue中的消息
     * @param message
     */
    @RabbitListener(queues = "directQueue")
    public void receive(String message){
        System.out.println("DirectConsumer receive message " + message);
    }
}

 我们可以看到在spring boot中是通过监听器注解并指明获取消息的队列的名称来接收消息的。

4.生产者代码

/**
 * 生产者
 */
@Component
public class DirectProducer {
    /**
     * 注入amqpTempalte发送消息
     */
    @Autowired
    public AmqpTemplate template;

    public void send(String message){
        template.convertAndSend("directExchange","directRoutingKey", message);
        System.out.println("Producer send message " + message);
    }
}

 

发布消息通过注入AmqpTmeplate来实现。

5.测试:编写测试类,发送消息

@RunWith(SpringRunner.class)
@SpringBootTest
public class DirectExchangeTest {

    @Autowired
    private DirectProducer producer;

    @Test
    public void contextLoads() {
        producer.send("directExchange message test");
    }

}

 

查看日志可以看到我们的消息被路由到了队列,并成功的被接收到了

剩下的扇形交换机和主题交换机的实现方式和直连交换机的非常相似,这里就不把代码详细列出了。代码的github地址为:https://github.com/wutianqi/springboot-rabbitmq.git

参考资料:https://www.cnblogs.com/hlhdidi/p/6535677.html

posted @ 2018-12-03 15:37  安静的boy  阅读(600)  评论(0编辑  收藏  举报