springboot快速集成rabbitmq示例

涉及到的依赖

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

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

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.83</version>
        </dependency>

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </dependency>

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

生产者product模块

1.常量类

@Configuration
public class RabbitmqConstant {
    public static final String EXCHANGE_NAME = "young.exchange.info";

    public static final String QUEUE_INFO_ADD = "queue.info.add";
    public static final String QUEUE_INFO_DELETE = "queue.info.delete";
    public static final String QUEUE_INFO_UPDATE = "queue.info.update";
    public static final String QUEUE_INFO_SELECT = "queue.info.select";


    public static final String KEY_INFO_ADD = "key.info.add";
    public static final String KEY_INFO_DELETE = "key.info.delete";
    public static final String KEY_INFO_UPDATE = "key.info.update";
    public static final String KEY_INFO_SELECT = "key.info.select";

}

2.初始化rabbitmqTemplate,交换机,队列,路由key

@Configuration
@Slf4j
public class RabbitmqConfig {

    @Resource
    private AmqpAdmin amqpAdmin;

    /**
     * @Description: 初始化exchange, queue和routingKey
     * @Author: young
     * @Date: 2022/8/25 14:53
     */
    @Bean
    public void initBinding() {
        //用直接交换机(和topic交换机一样,需要queue和routingKey;Fanout交换机不需要routingKey)
        amqpAdmin.declareExchange(new DirectExchange(RabbitmqConstant.EXCHANGE_NAME, true, false));

        //add
        amqpAdmin.declareQueue(new Queue(RabbitmqConstant.QUEUE_INFO_ADD, true));
        amqpAdmin.declareBinding(new Binding(RabbitmqConstant.QUEUE_INFO_ADD, Binding.DestinationType.QUEUE, RabbitmqConstant.EXCHANGE_NAME, RabbitmqConstant.KEY_INFO_ADD, null));

        //delete
        amqpAdmin.declareQueue(new Queue(RabbitmqConstant.QUEUE_INFO_DELETE, true));
        amqpAdmin.declareBinding(new Binding(RabbitmqConstant.QUEUE_INFO_DELETE, Binding.DestinationType.QUEUE, RabbitmqConstant.EXCHANGE_NAME, RabbitmqConstant.KEY_INFO_DELETE, null));

        //update
        amqpAdmin.declareQueue(new Queue(RabbitmqConstant.QUEUE_INFO_UPDATE, true));
        amqpAdmin.declareBinding(new Binding(RabbitmqConstant.QUEUE_INFO_UPDATE, Binding.DestinationType.QUEUE, RabbitmqConstant.EXCHANGE_NAME, RabbitmqConstant.KEY_INFO_UPDATE, null));

        //select
        amqpAdmin.declareQueue(new Queue(RabbitmqConstant.QUEUE_INFO_SELECT, true));
        amqpAdmin.declareBinding(new Binding(RabbitmqConstant.QUEUE_INFO_SELECT, Binding.DestinationType.QUEUE, RabbitmqConstant.EXCHANGE_NAME, RabbitmqConstant.KEY_INFO_SELECT, null));
    }

    @Bean
    public RabbitTemplate amqpTemplate(ConnectionFactory connectionFactory) {
        RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
        //支持send消息的时候传输javaBean
        rabbitTemplate.setMessageConverter(new Jackson2JsonMessageConverter());
        return rabbitTemplate;
    }

}

3.定时发送消息

@EnableScheduling
@EnableAsync
@Component
@Slf4j
public class SendMessage {
    @Resource
    private RabbitTemplate amqpTemplate;

    @Async
    @Scheduled(cron = "0/10 * * * * *")
    public void sendAdd() {
        String message = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        log.info("routingKey={},message={}", RabbitmqConstant.KEY_INFO_ADD, message);
        amqpTemplate.convertAndSend(RabbitmqConstant.EXCHANGE_NAME, RabbitmqConstant.KEY_INFO_ADD, message);
    }

    @Async
    @Scheduled(cron = "0/10 * * * * *")
    public void sendUpdate() {
        String message = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        log.info("routingKey={},message={}", RabbitmqConstant.KEY_INFO_UPDATE, message);
        amqpTemplate.convertAndSend(RabbitmqConstant.EXCHANGE_NAME, RabbitmqConstant.KEY_INFO_UPDATE, message);
    }
}

4.application.yml

spring:
  application:
    name: rabbitmq-product
  rabbitmq:
    host: yourHost
    port: 5672
    virtual-host: /
    username: guest
    password: guest

server:
  port: 8082

5.客户端查看
在这里插入图片描述

消费者consumer模块

1.监听队列

@Component
@Slf4j
public class SpringRabbitListener {
    @Resource
    private Environment environment;

    @Value("${spring.application.name}")
    private String serverName;

    @RabbitListener(queues = RabbitmqConstant.QUEUE_INFO_ADD)
    public void listenerTopicAdd(String message) {
        log.info("{} 监听到 add 消息:" + message, environment.getProperty("spring.application.name"));
    }

    @RabbitListener(queues = RabbitmqConstant.QUEUE_INFO_UPDATE)
    public void listenerTopicUpdate(String message) {
        log.info("{} 监听到 update 消息:" + message, serverName);
    }

    @RabbitListener(queues = RabbitmqConstant.QUEUE_INFO_DELETE)
    public void listenerTopicDelete(String message) {
        log.info("{} 监听到 delete 消息:" + message, serverName);
    }


    @RabbitListener(queues = RabbitmqConstant.QUEUE_INFO_SELECT)
    public void listenerTopicSelect(String message) {
        log.info("{} 监听到 select 消息:" + message, serverName);
    }
}

2.application.yml

spring:
  application:
    name: rabbitmq-consumer1
  rabbitmq:
    host: yourHost
    port: 5672
    virtual-host: /
    username: guest
    password: guest

server:
  port: 8083

3.消费日志
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值