gpt4 book ai didi

java - 使用 ForkChannel 时调用 MembershipListener#viewAccepted 时,RpcDispatcher#callRemoteMethods 不起作用

转载 作者:行者123 更新时间:2023-12-02 04:22:52 26 4
gpt4 key购买 nike

使用 ForkChannel 时调用 MembershipListener#viewAccepted 时,RpcDispatcher#callRemoteMethods 不起作用。

我正在尝试将应用程序中使用的 JGroups 版本从 2 升级到 4.1.0.Final。该应用程序使用 MuxRpcDispatcher,因为它使用多个 RpcDispatcher。mux 包在版本 4 中已被弃用,我们正在尝试使用替代的 fork-stack。但是,当您在viewAccepted中执行RpcDispatcher时,处理卡住。

使用 ForkChannel 时调用 MembershipListener#viewAccepted 时,RpcDispatcher#callRemoteMethods 不起作用。

channel = new JChannel();
channel.setReceiver(this);

if (channel.getProtocolStack().findProtocol(FORK.class) == null) {
channel.getProtocolStack().addProtocol(new FORK());
}

forkChannel = new ForkChannel(channel, "fork", "fork");
dispatcher1 = new RpcDispatcher(forkChannel, new Boe1());

channel.connect("test");
forkChannel.connect("test");

在viewAccepted中调用RpcDispatcher。处理在此调用时停止。

@Override
public void viewAccepted(final View new_view) {
LOGGER.info("viewAccepted:start");
try {
final MethodCall call = new MethodCall(Boe1.class.getMethod("boeee"));
final RequestOptions options = new RequestOptions(ResponseMode.GET_ALL, 0, true, null);
dispatcher1.callRemoteMethods(null, call, options);
} catch (final Exception e) {
e.printStackTrace();
}
LOGGER.info("viewAccepted:end");
}

以下是停止状态下的线程转储。

"jgroups-10,test,IM9072-10017" #22 prio=5 os_prio=0 tid=0x000000002b4b5800 nid=0x2cf8 waiting on condition [0x000000002c84d000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x000000071b24ccd0> (a java.util.concurrent.CompletableFuture$Signaller)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.CompletableFuture$Signaller.block(CompletableFuture.java:1693)
at java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3323)
at java.util.concurrent.CompletableFuture.waitingGet(CompletableFuture.java:1729)
at java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1895)
at org.jgroups.blocks.GroupRequest.access$7(GroupRequest.java:1)
at org.jgroups.blocks.GroupRequest$$Lambda$135/1688803174.call(Unknown Source)
at org.jgroups.blocks.GroupRequest.doAndComplete(GroupRequest.java:274)
at org.jgroups.blocks.GroupRequest.waitForCompletion(GroupRequest.java:254)
at org.jgroups.blocks.GroupRequest.waitForCompletion(GroupRequest.java:1)
at org.jgroups.blocks.Request.execute(Request.java:52)
at org.jgroups.blocks.MessageDispatcher.cast(MessageDispatcher.java:319)
at org.jgroups.blocks.MessageDispatcher.castMessage(MessageDispatcher.java:251)
at org.jgroups.blocks.RpcDispatcher.callRemoteMethods(RpcDispatcher.java:96)
at ppp.network.JChannelRunner.viewAccepted(JChannelRunner.java:79)
at org.jgroups.JChannel.invokeCallback(JChannel.java:917)
at org.jgroups.JChannel.up(JChannel.java:759)
at org.jgroups.stack.ProtocolStack.up(ProtocolStack.java:908)
at org.jgroups.protocols.FORK.up(FORK.java:131)

有办法避免卡住吗?

最佳答案

您不应该永远阻塞回调,例如viewAccepted()!如果您绝对必须调用 RPC,请异步调用 (mode=GET_NONE) 或带外 (OOB)。您也可以在单独的线程中执行此操作。

有关详细信息,请参阅[1]。干杯,

[1] http://www.jgroups.org/manual4/index.html#ReceiverAdapter

关于java - 使用 ForkChannel 时调用 MembershipListener#viewAccepted 时,RpcDispatcher#callRemoteMethods 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56624951/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com