我来自客户端编程背景(主要是C++)。但是,我现在偶尔需要进入一些Java的小型服务器端项目&,因此需要来自有经验的服务器端人员的一些建议。我对应用程序服务器并不十分了解。需要一个应用程序服务器 - Java
是否有任何拇指规则或注意事项来决定程序何时需要应用程序服务器(如GlassFish或JBoss)?
我有两台使用Java编写的服务器,都运行在专用机器上。一台服务器在没有任何App Server的情况下在Tomcat上运行第二台服务器在应用程序服务器(Glassfish)上运行。
我需要写一个相当简单的程序,坐在中间。这是程序将要做的事
在套接字上侦听。当连接来自第一台服务器时,它会创建一个线程来接受连接&继续收听。
线程从第一个服务器获取少量数据(比如100-200字节),数据格式很小&通过web服务调用将它传递给第二个服务器。它会返回webservice调用的返回值,并基于它进行一些处理 - 可能大约有10-20行代码 - 这不是一些主要的处理 - 只是在不同的(第3)服务器上调用一些web服务调用。在此之后,它将一些数据返回给第一台服务器 - 再次不多 - 可能是50个字节。
我的程序不是web服务。它仅以特定格式从第一台服务器获取消息&根据从第一台服务器接收到的数据向第二台服务器发出web服务调用。在某些情况下,您可以用这种方式思考它 - 它充当第一台服务器的代理,以便将Web服务调用到第二台服务器。
所有主要的工作是由第一台服务器运行在Tomcat服务器上运行& GlassFish上运行的Web服务应用程序来完成。这两个都是测试良好的程序。我想写的中间程序非常简单&我可以在半天内完成。但是,我担心的是它是否能够承受负担。
有什么样的规则/考虑因素可以确定我是否可以将此Java程序作为常规Windows服务运行,或者是否需要Glassfish或任何其他应用程序服务器之类的东西。
我应该考虑每分钟/小时进入的连接数量吗?我将为每个连接分配一个线程,但线程本身不会很长寿。我应该在什么样的连接数阈值下考虑应用服务器?还有其他的考虑吗?如果可能的话,我宁愿避免使用Application Server。
是否在App Server下运行它只是一个问题 - 我还有什么问题吗?
不确定这是否适合您的用例,但此类服务连接的一种标准方式是通过使用JMS队列的发布 - 订阅模型。每个服务都有一个消息队列。您会在队列中堆积消息,处理消息并将结果发布到其他服务的队列中。 –
@Singularity - 第一台服务器以特定格式发送消息,并期望以特定格式回复。我将研究JMS队列,但我认为JMS队列有自己的格式。 – user93353
是JMS使用XML(Soap),但CDATA标签允许将任何原始数据放入XML中。 –