学习RabbitMQ的一些个人总结

RabbitMQ是流行的开源消息队列系统,用erlang语言开发,RabbitMQ是AMQP(高级消息队列协议)的标准实现。采用该技术,我们可以实现异步处理、流量削峰、系统解耦;

消息 Message 是指在应用件传送的数据,消息可以非常简单,比如只包含文本字符串.也可能包含嵌入对象.

消息队列(Message Queue)是一种应用间的通信方式,消息发送后可以立即返回,由消息系统来确保消息的科可靠传递.
//异步协作机制

RabbitMQ 消息队列
基于Erlang语言开发的AMQP的开源实现.
AMQP : Advanced Message Queue 高级消息队列协议
1.可靠性 (持久化,传输确认,发布确认)
2.灵活的路由 (转发. 在消息进入队列之前,通过Exchange来路由消息)
3.消息集群(多个RabbitMQ服务器组成一个集群,形成一个逻辑Broker)
4.高可用(不会出现单点故障, 在部分节点出现问题的情况下队列仍然可用)
5.多协议标准 ( STOMP.MQTT)
6.多语言客户端(几乎支持所有常用语言)
7.管理界面( 用户界面,使得用户可以监控和管理消息Broker的许多方面)
8.跟踪机制( 如果消息异常,会提供消息跟踪机制)

RabbitMQ 常用命令
启动 rabbitmq-server start
关闭 rabbitmqctl stop
端口 15672
插件 rabbitmq-plugins enable rabbitmq_management

RabbitMQ 消息发送与接收机制
消费者订阅某个队列,生产者创建消息,然后发布到队列(queue)中,最后将消息发送给监听的消费者

生产者----Broker 消息队列实体[Virtual Host(可以有若干个交换机 Exchange —binding-- 队列 Queue)]-----通道–消费者

AMQP中的消息路由
增加了Exchange和Binding的角色.生产者把消息发布到Exchange上,消息到达队列并被消费者接收,而Bingding决定交换器的消息应该发布到哪个队列.

Exchange类型 //4种策略
1.dircet交换机
消息一对一的绑定,精准匹配,会根据message中Routingkey的内容将消息发送给对应的Queue中. 队列需要指定好Bindingkey与routingkey一致.消费者只需要监听某个队列以后就会获取队列中的消息
2.fanout //适用于一些消息数据不是很重要的应用中.例如手机app消息推送
广播模式,消息是一对多的,不需要任何的key和binding.转发消息是最快的. 必须要在消费中监听队列,如果没人去接收就会永远错过消息,会丢失消息.
3.topic
基本概念与Fanout差不多,但是topic需要指定BindingKey,消息中也需要携带RoutingKey.但是它的bindingKey可以识别通配符 *( 必须要匹配一个单词 ) / # ( 可以匹配0个或任意多个单词 ) . 单词和单词主键需要使用 “.” 进行分割. 它也会丢失消息,所以需要消费者去提前监听队列.
4.headers

//========================================================================
消息发送类 //端口名是5672

	//创建连接工厂
    ConnectionFactory connectionFactory = new ConnectionFactory();
    //配置RabbitMQ的连接信息
    connectionFactory.setHost("192.168.0.242"); //指定ip
    connectionFactory.setPort(5672);    //端口
    connectionFactory.setUsername("root");
    connectionFactory.setPassword("1212");

    Connection connection = null; //定义连接
    Channel channel = null; //定于通道

    try {
        connection = connectionFactory.newConnection(); //获取连接
        channel = connection.createChannel();   //获取通道

        //利用通道创建队列,声明一个队列
        /*
        *   参数1:队列名称,取值任意
        *   参数2:是否为持久化队列
        *   参数3:是否排外?如果排外则这个队列只允许一个消费者监听
        *   参数4:是否自动删除队列,true->队列中没有消息和消费者链接时自动删除
        *   参数5:队列属性设置,通常为null
        *
        * 注意:
        * 1.声明队列时,这个队列名称如果已存在则放弃声明,如果不存在会声明一个新队列
        * 2.队列名可以随便取,但是要与消息接收完全一致
		* 3.这行代码是可有可无的,但是一定要在发送消息前确认队列名称已经存在于RabbitMQ中,否则抛出异常
        * */
        channel.queueDeclare("",true,false,false,null);
        String msg = "嗷嗷嗷嗷嗷哦啊";

        /*
        *   参数1:交换机名称,空字符串表示不适用交换机
        *   参数2:队列名称或Routing,指定了交换机名称后这个值就是routingKey
        *   参数3:消息属性信息,通常为空
        *   参数4:具体的消息数据的字节数组
        *
        * */

        channel.basicPublish(&
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值