SpringBoot整合RabbitMQ

一、消息生产者环境搭建

1.创建SpringBoot的消息生产者工程,引入依赖

<dependencies>

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

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

    </dependencies>

2.配置application.properties

spring.rabbitmq.addresses=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

3.定义一个发送消息服务的接口

public interface MQService {

    void send();

}

4.接口的实现

@Slf4j
@Service
public class RabbitMQService implements MQService {

    @Autowired
    private AmqpTemplate amqpTemplate;

    private Integer count = 1;

    @Override
    @Scheduled(fixedDelay = 3000) //每隔3秒自动发送一次消息
    public void send( ) {
        //使用amqpTemplate来发送消息
        /**
         * 参数1:交换机名称
         * 参数2:routing-key
         * 参数3:具体的消息内容
         */
        amqpTemplate.convertAndSend("directExchange","direct-routing-key","测试消息" + count);
        log.info("已发送信息: 测试消息" + count++ );
    }
}

如果MQ服务器上没有相应的交换机和队列,则可以通过配置来创建队列和交换机以及绑定。

配置代码:

@Configuration
public class RabbitConfig {

    /**
     * 创建一个直连交换机
     */
    @Bean
    public DirectExchange directExchange(){
        return new DirectExchange("directExchange");
    }

    /**
     * 创建一个队列
     */
    @Bean
    public Queue queue(){
        return new Queue("directQueue");
    }

    /**
     * 将队列与交换机进行绑定
     * 注意:如果想以参数的形式将队列绑定,则形参名必须要与某个@Bean方法的方法名一致
     */
    @Bean
    public Binding binding(Queue queue,DirectExchange directExchange){
        //将一个队列通过routing-key绑定到交换机
        return BindingBuilder.bind(queue).to(directExchange).with("direct-routing-key");
    }

}

结构图:
在这里插入图片描述

二、消息消费者环境搭建

消息消费者的pom.xml依赖的application.properties中的配置是一样的,但是要修改端口,其他的直接复制即可。

1.创建一个接收的接口

public interface ReceiveService {

    void receive(); //只能在调用方法的时候接收一次消息,无法监听

    void receiveAsync(String message); //异步的方式监听消息

}

2.增加实现

@Slf4j
@Service
public class ReceiveServiceImpl implements ReceiveService{

    @Autowired
    private AmqpTemplate amqpTemplate;

    @Override //只能通过调用方法接收一次,无法异步监听
    public void receive() {
        //监听某个队列
        String message = (String) amqpTemplate.receiveAndConvert("directQueue");
        System.out.println(message);
    }

    /**
     * 异步监听 : 如果该方法没有发生异常,则会签收该消息
     *              如果该方法抛出了异常,也spring不会签收该条消息
     */
    @Override
    @RabbitListener(queues = {"directQueue"})  //指定监听的队列
    public void receiveAsync(String message) {
        log.info("接收的消息:" + message);
    }

}

结构图:
在这里插入图片描述

三、启动测试

启动生产者项目查看日志:
在这里插入图片描述
这里是以定时任务的方式每3秒发送一次消息的方式来推送消息的。


启动消费者项目查看日志:
在这里插入图片描述
可以发现,@RabbitListener注解是可以实现异步监听的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值