我想在redis pubsub中使用像kafka client_id这样的函数

时间:2019-08-29 12:52:37

标签: python redis apache-kafka

redis是否没有类似kafka client_id的功能?

pub.py

r = redis.StrictRedis(host=host, port=port, db=0)
channel = r.pubsub()

for i in range(10):
    print(r.publish("test", i))

print('end')

sub1.py

r = redis.StrictRedis(host=host, port=port, db=0)

p = r.pubsub()
p.subscribe('test')

# while True:
#     message = p.get_message()
#     if message:
#         print("Subscriber: %s" % message['data'])

for z in p.listen():
    print(z)

sub2.py

r = redis.StrictRedis(host=host, port=port, db=0)

p = r.pubsub()
p.subscribe('test')

# while True:
#     message = p.get_message()
#     if message:
#         print("Subscriber: %s" % message['data'])

for z in p.listen():
    print(z)

sub1.py结果是

{'type': 'message', 'pattern': None, 'channel': b'test', 'data': b'0'}
{'type': 'message', 'pattern': None, 'channel': b'test', 'data': b'1'}
{'type': 'message', 'pattern': None, 'channel': b'test', 'data': b'2'}
{'type': 'message', 'pattern': None, 'channel': b'test', 'data': b'3'}
{'type': 'message', 'pattern': None, 'channel': b'test', 'data': b'4'}
{'type': 'message', 'pattern': None, 'channel': b'test', 'data': b'5'}
{'type': 'message', 'pattern': None, 'channel': b'test', 'data': b'6'}
{'type': 'message', 'pattern': None, 'channel': b'test', 'data': b'7'}
{'type': 'message', 'pattern': None, 'channel': b'test', 'data': b'8'}
{'type': 'message', 'pattern': None, 'channel': b'test', 'data': b'9'}

sub2.py结果是

{'type': 'message', 'pattern': None, 'channel': b'test', 'data': b'0'}
{'type': 'message', 'pattern': None, 'channel': b'test', 'data': b'1'}
{'type': 'message', 'pattern': None, 'channel': b'test', 'data': b'2'}
{'type': 'message', 'pattern': None, 'channel': b'test', 'data': b'3'}
{'type': 'message', 'pattern': None, 'channel': b'test', 'data': b'4'}
{'type': 'message', 'pattern': None, 'channel': b'test', 'data': b'5'}
{'type': 'message', 'pattern': None, 'channel': b'test', 'data': b'6'}
{'type': 'message', 'pattern': None, 'channel': b'test', 'data': b'7'}
{'type': 'message', 'pattern': None, 'channel': b'test', 'data': b'8'}
{'type': 'message', 'pattern': None, 'channel': b'test', 'data': b'9'}

我不想读取其他订阅者订阅的行 就像卡夫卡的client_id。

我希望sub1.py结果是

{'type': 'message', 'pattern': None, 'channel': b'test', 'data': b'0'}
{'type': 'message', 'pattern': None, 'channel': b'test', 'data': b'2'}
{'type': 'message', 'pattern': None, 'channel': b'test', 'data': b'4'}
{'type': 'message', 'pattern': None, 'channel': b'test', 'data': b'6'}
{'type': 'message', 'pattern': None, 'channel': b'test', 'data': b'8'}

我希望sub2.py结果是

{'type': 'message', 'pattern': None, 'channel': b'test', 'data': b'1'}
{'type': 'message', 'pattern': None, 'channel': b'test', 'data': b'3'}
{'type': 'message', 'pattern': None, 'channel': b'test', 'data': b'5'}
{'type': 'message', 'pattern': None, 'channel': b'test', 'data': b'7'}
{'type': 'message', 'pattern': None, 'channel': b'test', 'data': b'9'}

我不想读取其他订阅者订阅的行。 帮帮我。

1 个答案:

答案 0 :(得分:0)

看看redis-streams及其“消费者组”功能。