我有一个小应用程序需要在后台连续运行。该程序能够设置目录监视服务,HTTPS侦听器以及需要作为主服务线程的一部分保持运行的其他服务。
但是,用户还需要与程序交互并手动执行任务,配置各种设置等。我使用jline和argsparse4j创建了一个命令行界面,允许用户执行此操作。
我可以运行主要的CLI线程,它可以执行我想要的所有操作,但是一旦我关闭线程,所有这些服务都会关闭主线程。
我已经使用流程构建器和使用shell脚本来解决这个问题,这些脚本会启动jvm的单独实例来运行某些进程,但这只是感觉不对。
我需要在这里结合两者的优点,通过拥有用户可以实际登录的持久服务,并注销,但都是本地的。首先想到的是mysql的行为方式。 MySQL始终作为服务运行,但用户可以使用一些登录参数键入mysql
,并使用“登录”到mysql来执行命令。这正是我希望我的程序工作的方式。
我的第一个想法是将所有功能包装在各种API中,并可能使用像AMQP这样的消息队列协议,然后将命令行界面解耦以向服务发送消息。这也很有意义,因为我们还在同一客户端上启用了HTTPS REST API,以允许远程用户使用其功能。所以我们只需要在API中处理两个消息协议。
但是,我想知道是否有比编写基于消息的完整API(客户端服务器)更好或更简单的替代方案?
答案 0 :(得分:0)
最终,我们选择了使用Spark Framework为Java实现的后端REST API。这可能不是最强大的,用户反馈一直是个问题。我们拆分了命令行界面以提交REST调用,并将结果显示给用户。