• 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
    

      

  • 相关阅读:
    easyui-tree/combotree 子节点前端懒加载(主要解决ie11下加载慢
    解决 Chrome 下表单自动填充问题 (两种方法
    代码编辑器:本地JS文件上传并加载到页面
    PC端使用rem进行屏幕适配
    ECharts 点击非图表区域的点击事件不触发问题
    Angular2+ 使用 Post 请求下载文件
    Express + Element-ui 实现图片/文件上传
    phpMyAdmin -- 没有权限操作用户
    Note of Moment -- 日期处理
    Angular 自定义表单控件 -- CheckboxGroupComponent
  • 原文地址:https://www.cnblogs.com/morgana/p/8849997.html
Copyright © 2020-2023  润新知