我有一个中央API服务器,用于启动集群工作程序实例。每个实例都有一个特定的较大任务,可能只有我要对该特定实例执行一些操作。这是我想到的一个粗略想法:
每个实例都是一个单独的工作程序进程,我希望可以将特定工作程序的所有API请求直接委派给工作程序(以在该工作程序中执行功能)。
instance /:id确实表示WorkerID。
客户端可能会请求workerID = x的日志,因此GET / instances / x / logs。
此处的目标是主服务器将实例X的所有请求路由到标识为x的子流程。
这不是为了在实际上是克隆/镜像的工作程序之间分配负载。
我的每个工人可能正在执行一项长期任务(几天,几周,几个月)的变体。方法在所有工作程序之间共享,但是如果我调用/ instances / x / logs,我只想在该特定工作程序进程上查询该方法。这就是我要找出的目标。
viewHolder.item.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Create Dialog on click
myDialog = new Dialog(mContext);
myDialog.setContentView(R.layout.choose_location);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
myDialog.create();
}
我看到我可以在不同进程的同一个端口上有多个Express侦听器,但是如果我理解正确的话,这会自动通过Express进行负载平衡。我无法根据路径将特定的请求路由到特定的工作人员,可以吗?
答案 0 :(得分:1)
每个实例都是一个单独的工作程序进程,我希望可以将特定工作程序的所有API请求直接委派给工作程序(以在该工作程序中执行功能)。
确实可以这样做,但是除非您的instance /:id代表WorkerID,否则您已经走到了尽头。
让我们假设以下示例中:id
不是工作者ID:
W -工人
W1 /instances/1/:method
-具有以下方法names
,cities
,cars
W2 /instances/2/:method
-具有以下方法names
,fruits
,stats
HTTP客户端将要访问:
GET /instances/1/name
,太好了,两条路径中都存在name
。 - TRUE GET /instances/2/fruits
,太好了,fruits
存在于 W2 ,但上,如果平衡器为您提供 W1 使用该路线,您会出错,因为 W1 - FALSE fruits
最终答案:
您不能要求工作人员弹出并履行您的意愿,最好的办法是在主工作人员之间进行某种通信,或者使用一些需要进行某些处理的方法,并根据CPU的使用情况,在工作人员较少时触发这些方法被送达。但是请看一看,如果它们死了,那么您可以fork
新建一个,而不会崩溃整个应用程序。