String boot+ RabbitMq初探

String boot+ RabbitMQ初探介绍RabbitMQ简介AMQP报文格式RabbitMQ如何提供消息队列功能Exchange与Queue绑定RabbitMQ管理界面Spring Boot使用RabbitMQ使用注解测试rabbitmq介绍RabbitMQ是一款开源的AMQP消息中间件,支持并发数可达10万级。关于RabbitMq详细介绍以及安装,可以参考官网:RabbitMQ。...
摘要由CSDN通过智能技术生成

介绍

RabbitMQ是一款开源的AMQP消息中间件,支持并发数可达10万级。关于RabbitMq详细介绍以及安装,可以参考官网:RabbitMQ
RabbitMQ、Spring Framework都由Privotal公司开发,Spring Framework已有对RabbitMQ的实现,Spring官方提供集成RabbitMQ的教程:Messaging with RabbitMQ。本文在官方教程的基础上,继续探索在如何spring boot使用rabbitmq。

RabbitMQ简介

AMQP报文格式

RabbitMQ基于AMQP协议,该协议定于报文格式如下:

MessageProperties{
header // 报文头,Map类型
Properties // 属性,多个key-value对
}
Body //消息内容

RabbitMQ如何提供消息队列功能

每一个RabbitMQ服务器提供exchange和queue等组件。当发送消息时,消息生产者将消息包文以及routing key先发送给exchange组件。Exchange组件在不同类型下,汇根据routing key或报文header寻找合适的queue,并将报文传到queue中。queue同exchange需要预先根据规则(稍后介绍)绑定了,才能被exchange找到。消息消费者监听某一个queue,并从queue中拿出消息进行处理。

同一个exchange可以根据不同规则绑定多个queue,并可以(根据规则定义)将同一条消息同时转发不同queue。多个消费者可以监听同一个queue并获取消息,但同一个queue中的每一条消息只会被消费(获取)一次,不会重复消费。

Exchange与Queue绑定

Queue组件需要预先同Exchange绑定。Exchange有四种类型:fanout、direct、topic和headers。其中fanout、direct和topic三种类型根据routing key将报文路由到适合的queue;headers类型根据header路由。fanout和direct类型的功能可以完全永topic类型实现。本文只介绍topic类型Exchange的使用;如对其他类型感兴趣,请参考RabbitMQ官方的介绍。

Queue绑定Topic类型Exchange时需要同时指定binding key作为路由判断依据。消息生产者发送消息报文同时发送消息routing key给exchange,exchange会将消息转到所有binding key与routing key匹配的queue中。binding key和routing key最大长度255字节,并由"."分隔单词,如stock.hk.hsbc。binding key中“*”字符被定义为匹配一个单词,“#”字符被定义匹配一个或多个连续单词。例如stock.hk.hsbc匹配下列binding key:

stock.hk.hsbc
stock.hk.*
*.hk.\*
stock.hk.#
stock.#

但是不匹配:

stock.*

RabbitMQ管理界面

RabbitMQ提供管理界面插件,默认通过http://localhost:15672访问,默认用户名guest,密码guest。有关管理界面详细信息,可参考Management Plugin

Spring Boot使用RabbitMQ

Spring Framework已集成使用RabbitMQ收发消息的全部功能。Spring官方文档提供了简单的使用方式;这里探索其他的方法使用RabbitMQ。

使用注解

Spring提供针对AMQP的注解。使用@RabbitListener注解创建并绑定exchange和queue,并方法连接消息接受方法和queue:

    @RabbitListener(
            bindings = @QueueBinding(
                    exchange = @Exchange(value = Application.topicExchangeName, type = ExchangeTypes.TOPIC, autoDelete = "true"),
                    value = @Queue(value = "spring-boot", autoDelete = "true"),
                    key = "foo.bar.#"
            )
    )
    public void receiveMessage(String message) {
   
        System.out.println("Received <" + message + ">");
    }
<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值