我正在尝试开发一些消息传递系统,它可以同时使用ZeroMQ和RabbitMQ(可能更像activeMQ)。你知道吗
所以我这样想:
我的消息传递系统中的组件可以是发送方或接收方。他们两个都有地址,所以我需要概括一下。因此,我创建了它—AbstractMessagingNode,其中包含两个更精确的抽象:AbstractReceiver和AbstractSender。你知道吗
class AbstractMessagingNode():
__metaclass__ = ABCMeta
def __init__(self, host):
self.host = host
class AbstractReceiver(AbstractMessagingNode):
__metaclass__ = ABCMeta
callback = None
host = None
def __init__(self, host, on_receive_callback):
super(AbstractReceiver, self).__init__(host)
self.callback = on_receive_callback
def on_message_received(self, *args):
self.callback(*args)
class AbstractSender(AbstractMessagingNode):
__metaclass__ = ABCMeta
@abstractmethod
def send_message(self, message):
pass
一开始我只和兔子一起工作。因此,我为此创建了两个更精确的抽象(基本上把它们看作具体的实现)
class BaseRabbitSender(AbstractSender):
__metaclass__ = ABCMeta
default_port_number = 5672
def __init__(self, host):
super(BaseRabbitSender, self).__init__(host)
self.connection = pika.BlockingConnection(pika.ConnectionParameters(
host=host))
self.channel = self.connection.channel()
@abstractmethod
def send_message(self, message):
pass
def close_connection(self):
self.connection.close()
等等。。。你知道吗
这一切都很顺利,直到我试着把zmq放进去。你知道吗
问题是zmqnode也可以是发送方或接收方(在我的例子中)。但是接收方和发送方都需要通用的方法和字段。我试着用这门课来捕捉
class AbstractZmqNode(AbstractMessagingNode):
__metaclass__ = ABCMeta
def __init__(self, host, port):
super(AbstractZmqNode, self).__init__(host)
self.port = port
self.context = zmq.Context()
def set_hwm(self, hwm):
self.socket.set_hwm(hwm)
@staticmethod
def build_address(host, port):
strings = [host, ':', str(port)]
return ''.join(strings)
但这就产生了代码重复的问题,因为在这种情况下,我还需要AbstractZmqSender和AbstractZmqReceiver,这是不好的。你知道吗
我在考虑桥接模式,但不知道从哪里开始,因为在所有桥接模式的示例中,抽象只是一个接口,但在我的例子中,它有一些数据字段。你知道吗
我愿意接受你的帮助和建议。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐