2

我现在正在分布式系统上课,我无法理解中间件的概念。我知道它是一个软件层,它提供应用程序和网络上实际通信之间的抽象级别,但我需要具体的例子。我知道CORBA和Java RMI是中间件的例子,但这些对我来说真的没有意义。什么是分布式系统中的中间件?

当我在Java中编写客户端服务器程序时,通过DatagramSockets()进行通信的是那个中间件?如果是的话为什么不呢Java DatagramSocket()方法提供了一个从我的应用程序到网络实际通信的抽象级别。

+1

这是一个相当混乱的术语。大多数情况下,我认为它是指用于实现内部API的软件层,例如面向用户的Web应用程序和底层数据库存储层之间的粘合剂,但更为接受的形式术语似乎是像CORBA或Java RMI。这个术语似乎没有太多的一致性。 [维基百科文章](http://en.wikipedia.org/wiki/Middleware)相当不错。 – rra

+0

我同意@rra。这个术语实际上是一个没有真正意义的流行词。有些人会认为JSON编码器和解码器是中间件。毕竟,它位于大量的软件组件之间,并允许它们进行通信。 –

回答

1

我同意评论者至今 - 这不是一个明确的术语。

但是,最适用于您的问题的东西我能想到的是消息队列,如0MQRabbitMQ。它们提供了与网络交互的不同方式,比直接使用TCP或UDP更加抽象。他们都鼓励使用可应用于大多数分布式系统问题的“网络模式”。

  • 0MQ提供关于在其中客户端和服务器开始的顺序的灵活性,使用多种协议(线程之间/进程之间/在TCP/UDP上/ ...)来发送消息,并与网络断开连接的交易。

  • RabbitMQ(我不太了解)提供了集中的消息队列,这些消息队列被保存到磁盘,并允许网络上的客户端只知道相关队列的位置(而不是该队列的所有生产者/ )。