訊息中介軟體通用化封裝

pswyjz發表於2021-09-09

前期在專案中將AMQ封裝好了以後,為使用者提供了便捷的服務。但是Kafka這塊遲遲沒有動手整合到介面中,主要還是因為Kafka的傳送和接收均和AMQ大相徑庭。業界主流的訊息中介軟體,主要用的就是JMS, AMQP和類Kafka(可Kafka自稱是類AMQP)。相差都很大。

這個月下定決心再次嘗試封裝,但是還是做不到對使用者完全透明,目前的程式碼實現到這樣的程度:

// 建立連線MQClientFactory cf = new MQClientFactory("mq.properties");
MQClient client = cf.createClient();
client.start()
// 傳送AMQMessageMap<String, Object> property = new HashMap<String,Object>();
property.put("property","this is a property");// 透過不同的AMQMessage的建構函式,支援text,obj,byte[]等訊息型別AMQMessage msg = new AMQMessage("this is a test",property);
client.send(destination,msg);
// 傳送KafkaMessage,支援string和byte[]KafkaMessage msg = new KafkaMessage(key,value);
client.send(destination,msg, new Callback(){...});
// 消費訊息while (true) {
  MQMessage msg = client.receive(destination,1000);  if (msg!=null) {    if (msg instanceof AMQMessage) {
    } else if (msg instanceof KafkaMessage) {
    }
  }
}

可以看到,對使用者暴露出的是AMQMessage和KafkaMessage類,其實在我一開始的概念中,最好是可以將AMQ和KAFKA都對外遮蔽了的。

然後我意識到不管怎麼封裝,使用者接入的時候其實都會知道自己用的是什麼產品。封裝一層以後,的確是減少了學習的成本,但是也降低了一些效能,是不是有點得不償失呢?

不管怎樣,既然已經封裝到這個程度,先用用看吧。



作者:MisterCH
連結:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/755/viewspace-2819142/,如需轉載,請註明出處,否則將追究法律責任。

相關文章