情况:2个小型java应用程序,它们都连接到远程服务并在那里发送一些数据(第一个应用程序侦听本地套接字,处理数据,将其发送到远程服务进行验证并处理响应;第二个应用程序在预定时间启动,为数据库处理一些数据并将数据发送到远程服务。问题是远程服务只允许一个连接(该连接是SMPP会话),这意味着如果一个应用程序正在运行而其他应用程序启动并尝试建立连接然后坏事情会发生......
我们的想法是将2个应用程序合并为1个(可能还有其他解决方案?)并创建某种控制工作流功能,负责管理应用程序以避免连接到远程服务时发生冲突。 有人能给我任何关于这个想法的建议吗?也许有某种设计模式可以让我在实施时避免一些陷阱? (如果有一些开源应用程序管理类似的问题,那么我会浏览源代码并收集一些好的信息会更好。)
谢谢。
答案 0 :(得分:1)
最明显的解决方案是编写一个简单的反向代理服务器,将服务请求收集到队列中并逐个发送到远程服务。或者代理可以为每个请求运行新的服务实例。 http://en.wikipedia.org/wiki/Reverse_proxy
答案 1 :(得分:1)
将数据与必要的元数据一起包装到类中。
将您的应用程序放在单独的线程中,而不是发送数据将它们添加到队列。
然后,在另一个线程中,从队列中读取队列并发送数据到服务。
我试试 BlockingQueue (http://download.oracle.com/javase/1,5.0/docs/api/java/util/concurrent/BlockingQueue.html)。