使用消息中间件RabbitMQ的一点点体会

使用消息中间件rabbitMQ的一点点理解--》topic方式

对交换机和队列进行统一管理

可以通过创建一个接口的方式,在接口中定义交换机与队列名称,如下图:

/**
 * @author
 * @Date 
 * 对队列和交换机进行统一管理
 */
public interface ProductRabbitConfig {

    String QUEUE_NAME_PRODUCTADD="productAdd";

    String EXCHANGE_NAME1="exchange1";

    String PRODUCT_SEARCH_EXCHANGE="product_search_exchange";

    String QUEUE_NAME_PRODUCTDEL="productDel";

    String USER_CART_EXCHANGE = "user_cart_exchange";

    String QUEUE_NAME_MERGECART = "mergecart";
}

消息中间件主要有两个角色

生产者

首先是生产者,在生产者中,通过rabbitTemplate的convertAndSend()方法发送异步消息至对列中, 具体实现如下:
首先需要在pom文件中引入依赖

		<!--引入中间件的依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>

然后需要在生产者中配置交换机。

@Component
public class RabbitMQConfig {

    @Bean
    public TopicExchange getExchange(){
        return new TopicExchange(ProductRabbitConfig.PRODUCT_SEARCH_EXCHANGE,true,false);
    }
}

交换机配置完成后,再在生产者的方法中,发送消息到队列

rabbitTemplate.convertAndSend(ProductRabbitConfig.USER_CART_EXCHANGE,"merge_cart",request);

至此,生产者中的事已经完成了。

消费者

与生产者一样,首先需要引入rabbitMQ的依赖,如上。
其次,创建一个配置文件,与生产者不同的是,消费者需要声明队列,交换机以及将两者绑定在一起。

@Configuration
public class RabbitMQConfig {

    @Bean
    public Queue getQueue(){
        return new Queue(ProductRabbitConfig.QUEUE_NAME_PRODUCTADD,false,false,false);
    }

    @Bean
    public TopicExchange getExchange(){
        return new TopicExchange(ProductRabbitConfig.PRODUCT_SEARCH_EXCHANGE,true,false);
    }

    @Bean
    public Binding bind(Queue getQueue,TopicExchange exchange){
        return BindingBuilder.bind(getQueue).to(exchange).with("product.add");
    }

    @Bean
    public Queue getDelQueue(){
        return new Queue(ProductRabbitConfig.QUEUE_NAME_PRODUCTDEL,false,false,false);
    }

    @Bean
    public Binding bind1(Queue getDelQueue,TopicExchange exchange){
        return BindingBuilder.bind(getDelQueue).to(exchange).with("product.del");
    }
}

这里需要注意的是:
1,一个交换机可以绑定多个队列,但是在绑定时,因为没有给@bean指定名称,所以默认按照方法名称自动注入队列,比如方法名称是getQueue,那么在spring眼里,自动注入的队列名称就是getQueue,所以如果需要配置多条队列时,绑定交换机时需要注意队列不要弄错了!!
2,创建交换机时,durable(持久化),autodelete(自动删除)参数一定要和生产者中对应的交换机参数一致,否则会报错.

最后,建议再在创建一个单独用来处理消息队列的类,这样会比较清晰

@Component
public class ProductComsumer {

    @Reference
    private ISearchService searchService;


    @RabbitListener(queues = ProductRabbitConfig.QUEUE_NAME_PRODUCTADD)
    @RabbitHandler
    public void recv(Long id){
        searchService.updateData(id);
        System.out.println("更新成功!");
    }

    @RabbitListener(queues = ProductRabbitConfig.QUEUE_NAME_PRODUCTDEL)
    @RabbitHandler
    public void del(Long id){
        searchService.delById(id);
    }
}

以上

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值