[英]Does Kafka to support bidirectional?
我有兩台需要進行雙向通信的服務器。
對於 kafka,我有 2 個主題、2 個生產者和 2 個消費者。 嘗試將服務器 1 與 2 與 1 個主題、1 個消費者和 1 個生產者進行通信,反之亦然,用於第 2 個服務器。
生產者.py
from kafka import KafkaProducer, KafkaConsumer
import gevent
import time
producer = KafkaProducer(bootstrap_servers='localhost:9092')
consumer = KafkaConsumer('game_events', bootstrap_servers='localhost:9092')
def prod():
while True:
time.sleep(2)
producer.send('sockets', b'Hello world')
producer.flush()
def cons():
while True:
game_server = consumer.__next__()
print(game_server)
gevent.spawn(prod())
gevent.spawn(cons())
消費者.py
from kafka import KafkaConsumer, KafkaProducer
import gevent
import time
consumer = KafkaConsumer('sockets', bootstrap_servers=['localhost:9092'])
producer = KafkaProducer(bootstrap_servers='localhost:9092')
def cons():
while(True):
game_server = consumer.__next__()
print(game_server)
def prod():
while True:
time.sleep(2)
print("game_server")
producer.send('game_events', b'Hello Game Event')
producer.flush()
#for message in consumer:
# print(message)
gevent.spawn(cons())
gevent.spawn(prod())
在這里,消費者只是收到sockets主題消息,而不是主題game_events 。 有什么辦法可以做到這一點? 還是卡夫卡不支持?
生產者.py
消費者.py
嗯,這很令人困惑。 這兩個模塊都有生產者和消費者......
你調用cons()
,它會啟動一個無限循環。 如果循環結束,該結果將傳遞給gevent.spawn()
,然后prod()
function 才會運行。
如果您打算啟動 Greenlet 線程,則需要傳遞 function 句柄本身,該句柄在內部為這些函數啟動線程。
gevent.spawn(cons)
gevent.spawn(prod)
此外,而不是消費者的 while 循環,你應該能夠for msg in consumer
,然后你需要獲取msg.value()
你真的不需要gevent
。
您的生產者可能是一個Timer
而消費者只是一個Thread
。 https://docs.python.org/3/tutorial/stdlib2.html#multi-threading
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.