The message delivered by nameko is persistent by default.
However, rabbitmq is worried about the throughput of persistent information. Sometimes, non-persistent information is required to speed up.
Just set delivery_mode=NON_PERSISTENT to 0 (NON_PERSISTENT is 0)
from loguru import logger
import settings
from nameko.standalone.events import event_dispatcher
from nameko.constants import NON_PERSISTENT
import time
config = {
'AMQP_URI': f'amqp://{settings.RABBITMQ_CONFIG.username}:'
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 _ in range(100000):
dispatch(
'test_publishe',
'to_publish',
'1234567890'
)
The message is not persistent, and the push rate can reach 2.5k/s
The above picture is what I pushed to the server through wifi on my macbook, and the delay is as follows:
PING 192.168.31.245 (192.168.31.245): 56 data bytes 64 bytes from 192.168.31.245: icmp_seq=0 ttl=64 time=4.563 ms 64 bytes from 192.168.31.245: icmp_seq=1 ttl=64 time=4.206 ms 64 bytes from 192.168.31.245: icmp_seq=2 ttl=64 time=3.787 ms 64 bytes from 192.168.31.245: icmp_seq=3 ttl=64 time=3.741 ms 64 bytes from 192.168.31.245: icmp_seq=4 ttl=64 time=4.791 ms 64 bytes from 192.168.31.245: icmp_seq=5 ttl=64 time=4.327 ms 64 bytes from 192.168.31.245: icmp_seq=6 ttl=64 time=3.905 ms 64 bytes from 192.168.31.245: icmp_seq=7 ttl=64 time=4.072 ms 64 bytes from 192.168.31.245: icmp_seq=8 ttl=64 time=4.170 ms 64 bytes from 192.168.31.245: icmp_seq=9 ttl=64 time=4.190 ms 64 bytes from 192.168.31.245: icmp_seq=10 ttl=64 time=10.588 ms 64 bytes from 192.168.31.245: icmp_seq=11 ttl=64 time=4.108 ms ^C --- 192.168.31.245 ping statistics --- 12 packets transmitted, 12 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 3.741/4.704/10.588/1.797 ms
What if message persistence is turned on? How fast can it go?
Use delivery_mode=PERSISTENT
As you can see, the speed is in the early 200s
The hard disk of the server is SSD Samsung pm981
But I am very strange, is rabbitmq so little throughput?
Then I wrote a producer naked with kombu
from vine.promises import promise
from kombu import Exchange, Queue
from kombu import Connection
from kombu.messaging import Producer
from kombu.transport.base import Message
from kombu import Exchange, Queue
from loguru import logger
import time
amqp_uri = 'amqp://pon:pon@192.168.31.245:5672//'
def declare_exchange(exchange: Exchange):
with Connection(amqp_uri) as conn:
with conn.channel() as channel:
exchange.declare(channel=channel)
def declare_queue(queue: Queue):
with Connection(amqp_uri) as conn:
with conn.channel() as channel:
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)
with Connection(amqp_uri) as conn:
with conn.channel() as channel:
started_at = time.time()
message = Message(channel=channel, body='123456789')
producer = Producer(
channel,
exchange=imdb_exchange
)
for _ in range(1000000):
res = producer.publish(
body=message.body,
routing_key='to_refresh',
headers=message.headers
)
ended_at = time.time()
logger.debug(f'pay time {ended_at-started_at} s')
# logger.debug(res)
As shown in the figure:
The gap is a bit big, it's all 3w/s!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。