将java应用程序合并到一个应用程序中的策略

将java应用程序合并到一个应用程序中的策略,java,architecture,Java,Architecture,情景:两个小型java应用程序都连接到远程服务并在那里发送一些数据(第一个应用程序侦听本地套接字,处理数据,将其发送给远程服务进行验证并处理响应;第二个应用程序按计划时间启动,为数据库处理一些数据并将数据发送给远程服务)。问题是远程服务只允许一个连接(该连接是SMPP会话),这意味着如果一个应用程序正在运行,而另一个应用程序启动并尝试建立连接,则会发生不好的事情 我们的想法是将2个应用程序合并到1中(可能还有其他解决方案?),并创建某种控制工作流功能,该功能将负责管理应用程序,以避免连接到远程服

情景:两个小型java应用程序都连接到远程服务并在那里发送一些数据(第一个应用程序侦听本地套接字,处理数据,将其发送给远程服务进行验证并处理响应;第二个应用程序按计划时间启动,为数据库处理一些数据并将数据发送给远程服务)。问题是远程服务只允许一个连接(该连接是SMPP会话),这意味着如果一个应用程序正在运行,而另一个应用程序启动并尝试建立连接,则会发生不好的事情

我们的想法是将2个应用程序合并到1中(可能还有其他解决方案?),并创建某种控制工作流功能,该功能将负责管理应用程序,以避免连接到远程服务时发生冲突。 有人能给我一些关于这个想法的建议吗?也许有某种设计模式允许我在实现时避免一些陷阱?(如果有一些开源应用程序可以处理类似的问题,这样我就可以浏览源代码并收集一些好的信息,那就更好了)


谢谢。

最明显的解决方案是编写一个简单的反向代理服务器,将请求收集到队列中,然后逐个发送到远程服务。或者代理可以为每个请求运行新的服务实例。
将数据与必要的元数据一起包装到类中

将应用程序放置到单独的线程中,然后将它们添加到队列中,而不是发送数据

然后,在另一个线程中,读取队列并将数据从队列发送到服务


我想尝试一下阻塞队列(http://download.oracle.com/javase/1,5.0/docs/api/java/util/concurrent/BlockingQueue.html)。

为什么不在每次请求后关闭连接?应用程序B需要从数据库获取数据,并向smpp服务器发送(例如)15条短信,这是否意味着我们需要打开关闭会话15次才能发送这些消息?我同意binary_runner的观点-使用队列累积消息并以固定的时间速率发送,这是异步交互的常用设计模式。。。