当前位置: 首页 > 后端技术 > Python

nameko发布的消息是不持久的

时间:2023-03-26 13:34:00 Python

nameko发布的消息默认是持久化的。但是rabbitmq对于持久化信息的吞吐量堪忧。有时,需要非持久性信息来加速。只需将delivery_mode=NON_PERSISTENT设置为0(NON_PERSISTENT为0)fromloguruimportloggerimportsettingsfromnameko.standalone.eventsimportevent_dispatcherfromnameko.constantsimportNON_PERSISTENTimporttimeBBConfig={'AMQP_URI':f'amqp://{settingsusername}:'f'{settings.RABBITMQ_CONFIG.password}@{settings.RABBITMQ_CONFIG.host}:'f'{settings.RABBITMQ_CONFIG.port}/{settings.RABBITMQ_CONFIG.vhost}'}dispatch=event_dispatcher(config,delivery_mode=NON_PERSISTENT)for_inrange(100000):dispatch('test_publishe','to_publish','1234567890')消息不持久化,推送速率可达2.5k/s。上图是我在macbook上通过wifi推送到服务器的,延迟如下:PING192.168.31.245(192.168.31.245):56databytes64bytesfrom192.168.31.245:icmp_seq=0ttl=64time=4.563来自192.168.31.245的ms64字节:icmp_seq=41ttl=4660来自192.168.31.245的字节:icmp_seq=2ttl=64time=3.787来自192.168.31.245的ms64字节:icmp_seq=3ttl=64time=3.741ms64来自192.168的字节。31.245:icmp_seq=4ttl=64time=4.791ms64字节,来自192.168。6ttl=64time=3.905ms64bytesfrom192.168.31.245:icmp_seq=7ttl=64time=4.072ms64bytesfrom192.168.31.245:icmp_seq=8ttl=64time=4.170ms64bytesfrom192.1245seq=9=64来自192.168.31.245的4.190ms64字节:icmp_seq=10ttl=64time=10.588ms64来自192.168.31.245的字节:icmp_seq=11ttl=64time=4.108ms^C---192.168.31.staticsping1---6.19231.statics-12packetstransmitted,12packetsreceived,0.0%packetlossround-tripmin/avg/max/stddev=3.741/4.704/10.588/1.797ms如果启用消息持久化怎么办?它能有多快?使用delivery_mode=PERSISTENT,可以看出服务器的硬盘是SSDSamsungpm981,速度200出头,但是我很奇怪,rabbitmq的吞吐量这么小吗?然后我用kombu写了一个bareproducerfromvine.promisesimportpromisefromkombuimportExchange,QueuefromkombuimportConnectionfromkombu.messagingimportProducerfromkombu.transport.baseimportMessagefromkombuimportExchange,Queuefromloguruimportloggerimporttimeamqp_uri='amqp://pon:pon@192.168.31.245:5672//'defdeclare_exchange(exchange:Exchange):withConnection(amqp_uri)作为conn:withconn.channel()作为通道:exchange.declare(channel=channel)defdeclare_queue(queue:Queue):withConnection(amqp_uri)asconn:withconn.channel()aschannel:queue.declare(channel=channel)imdb_exchange=Exchange('imdb',type='fanout')declare_exchange(exchange=imdb_exchange)imdb_queue=Queue('imdb_refresh',imdb_exchange,routing_key='to_refresh',durable=True)declare_queue(queue=imdb_queue)withConnection(amqp_uri)asconn:随着conn.channel()作为通道:started_at=time.time()message=Message(channel=channel,body='123456789')producer=Producer(channel,exchange=imdb_exchange)for_inrange(1000000):res=producer.publish(body=message.body,routing_key='to_refresh',headers=message.headers)ended_at=time.time()logger.debug(f'paytime{ended_at-started_at}s')#记录器。debug(res)如图:差距有点大,是3w/s!