zoukankan      html  css  js  c++  java
  • rabbitMQ消息队列1

    rabbitmq 消息队列
    	解耦
    
    	异步
    		优点:解决排队问题
    		缺点: 不能保证任务被及时的执行
    		应用场景:去哪儿,
    	同步
    		优点:保证任务被及时的执行
    		缺点:排队问题
    
    	大并发
    		Web nginx  10000-20000
    		    apache 1000-2000
    		pv= page visit = 上yi =10server web cluster集群
    
    		uv = user visit
    
    		qps =
    
    队列的作用
    	1. 存储消息、数据
    	2. 保证消息顺序
    	3. 保证数据的交付
    
    为什么用rabbitmq instead of python queue
    是因为python queue 不能跨进程
    
    #acknowledgment 消息不丢失
    #no-ack = False,如果消费者遇到情况(its channel is closed, connection is closed, or TCP connection is lost)挂掉了,
    #那么,RabbitMQ会重新将该任务添加到队列中
    #2、durable   消息不丢失 不能在已声明的队列中添加 而是需要重新定义
    #3、消息获取顺序
    #默认消息队列里的数据是按照顺序被消费者拿走,例如:消费者1 去队列中获取 奇数 序列的任务,消费者1去队列中获取 偶数 序列的任务。
    #channel.basic_qos(prefetch_count=1) 表示谁来谁取,不再按照奇偶数排列
    #4、发布订阅
    #发布订阅和简单的消息队列区别在于,发布订阅会将消息发送给所有的订阅者,而消息队列中的数据被消费一次便消失。所以,
    #RabbitMQ实现发布和订阅时,会为每一个订阅者创建一个队列,而发布者发布消息时,会将消息放置在所有相关队列中。
    #exchange type = fanout
    #5、关键字发送
    # exchange type = direct
    #之前事例,发送消息时明确指定某个队列并向其中发送消息,RabbitMQ还支持根据关键字发送,
    #即:队列绑定关键字,发送者将数据根据关键字发送到消息exchange,exchange根据 关键字 判定应该将数据发送至指定队列。
    #6、模糊匹配
    #exchange type = topic
    #在topic类型下,可以让队列绑定几个模糊的关键字,之后发送者将数据发送到exchange,exchange将传入”路由值“和 ”关键字“进行匹配,匹配成功,则将数据发送到指定队列。
    ## 表示可以匹配 0 个 或 多个 单词
    #*  表示只能匹配 一个 单词
    
    #当Consumer关闭连接时,这个queue要被deleted。可以加个exclusive的参数
    #channel.queue_declare(exclusive=True)
    生产者
    	1. 端口,ip,认证信息
    	2. 创建一个队列
    	3. 往队列里发消息
    消费者
    	1. 端口,ip,认证信息
    	2. 从指定队列里取消息
    
    确保消息被消费完毕
    	1. 生产者端发消息时,加参数
    		  properties=pika.BasicProperties(
    		  delivery_mode=2,  # make message persistent
    	  ),
    
    	2. 消费者端,消息处理完毕时,发送确认包
    		 ch.basic_ack(delivery_tag=method.delivery_tag)
    
    	channel.basic_consume(callback, #取到消息后,调用callback 函数
                          queue='task1',)
                          #no_ack=True) #消息处理后,不向rabbit-server确认消息已消费完毕
    
    durable = True , 保证队列持久化
    
    1)最大 Delivery Tag
    #传递标记是一个64位长的值,因此其最大值为9223372036854775807。
    #由于Delivery Tag唯一标识每个通道的每次投递,所以,发送者或客户端在实践中不太可能超过此值。
    
    
    消息的公平分发
    	消费者端
    		channel.basic_qos(prefetch_count=1)
    
     消息订阅发布
    
     exchange type
    	fanout = 广播
    	direct = 组播
    	topic  = 规则播
    	header =
    直连交换机(direct),
    主题交换机(topic),
    (头交换机)headers
     扇型交换机(fanout)
    rpc
    

      

  • 相关阅读:
    C# 之委托
    Java Maven安装及配置,利用Maven创建项目
    Java DecimalFormat四舍五入的坑及正确用法
    Java 解析XML的几种方式:DOM、SAX、JDOM和DOM4J。
    Java Properties配置文件和XML配置文件读取
    Java Map一些基本使用方法
    JAVA for循环的几种用法
    鼠标及键盘操作
    控制浏览器
    元素定位
  • 原文地址:https://www.cnblogs.com/morgana/p/8849997.html
Copyright © 2011-2022 走看看