gpt4 book ai didi

java - 来自多个交易参与者 jpos 的响应

转载 作者:行者123 更新时间:2023-11-30 02:16:03 27 4
gpt4 key购买 nike

我有一个事务管理器,我是这样配置的

<txnmgr name="txnmgr" logger="Q2" class="org.jpos.transaction.TransactionManager">
<property name="space" value="tspace:mySpace"/>
<property name="queue" value="TransactionQueue"/>
<property name="max-sessions" value="10"/>

<participant class="main.java.com.transaction.manager.Switch" logger="Q2">
<property name="0800" value="NetworkManagement" />
<property name="0200" value="FinancialTransaction" />
</participant>

<participant class="main.java.com.transaction.manager.FinancialTransactionResponse" logger="Q2"/>

<group name="NetworkManagement">
<participant class="main.java.com.transaction.manager.NetworkManagementResponse" logger="Q2" />
</group>

<group name="FinancialTransaction">
<participant class="main.java.com.transaction.manager.FinancialTransactionValidateMessage" logger="Q2" />
<participant class="main.java.com.transaction.manager.FinancialTransactionQueryRemoteHost1" logger="Q2" />


<participant class="main.java.com.transaction.manager.FinancialTransactionQueryRemoteHost2" logger="Q2" />

</group>

</txnmgr>

在我的 FinancialTransactionQueryRemoteHost1 中,我有

@Override
public int prepare(long l, Serializable srlzbl) {
try{

channelManager = ((ChannelManager) NameRegistrar.get("jpos-host1-adaptor"));
ISOMsg reqMsg = (ISOMsg) ((Context) srlzbl).get(Constants.REQUEST_KEY);
ISOMsg respMsg = channelManager.sendMsg(reqMsg);
((Context) srlzbl).put(Constants.RESPONSE_KEY, respMsg);
return PREPARED;

}catch(NameRegistrar.NotFoundException e){
e.printStackTrace();
return ABORTED;
}catch(Throwable t){
t.printStackTrace();
return ABORTED;
}

}

在我的 FinancialTransactionQueryRemoteHost2 中我有

    @Override
public int prepare(long l, Serializable srlzbl) {
try{

channelManager = ((ChannelManager) NameRegistrar.get("jpos-host2-adaptor"));
ISOMsg reqMsg = (ISOMsg) ((Context) srlzbl).get(Constants.REQUEST_KEY);
ISOMsg respMsg = channelManager.sendMsg(reqMsg);
((Context) srlzbl).put(Constants.RESPONSE_KEY, respMsg);
return PREPARED;

}catch(NameRegistrar.NotFoundException e){
e.printStackTrace();
return ABORTED;
}catch(Throwable t){
t.printStackTrace();
return ABORTED;
}

}

在我的财务交易响应中,我有

@Override
public int prepare(long id, Serializable context) {
Context ctx = (Context)context;
ISOMsg respMsg = (ISOMsg)ctx.get(Constants.RESPONSE_KEY);
//Get IsoMsg from host1
//Get IsoMsg from host2
//compare field 39 response if both are 00
String bit39 = respMsg.getString(70);
if(bit39==null){
respMsg.set(39,"06");
}
ctx.put(Constants.RESPONSE_KEY,respMsg);
return PREPARED;
}

在我的交易响应中,我如何获得 2 个参与者的响应,以便我可以在响应之前进行比较,即上面关于我希望如何实现它的评论

最佳答案

您只需将响应放在两个不同的键下即可。假设响应1和响应2:

FinancialTransactionQueryRemoteHost1.prepare中:

((Context) srlzbl).put("response1", respMsg);

FinancialTransactionQueryRemoteHost2.prepare中:

((Context) srlzbl).put(Constants.RESPONSE_KEY, respMsg);

然后在Financialtransactionresponse.prepare

ISOMsg resp1 = ctx.get("response1"), resp2 = ctx.get("response2");

您可以使用任何您想要的字符串并为它们定义内容。您可以为第一个重用 CONTEXT_KEY,为第二个重用另一个键。

此外,也许更好的是,您可以合并 FinancialTransactionQueryRemoteHost2 参与者中的回复。

供引用,参与者按顺序运行。

您甚至可以重用标准 QueryHost 参与者,请参阅 this tutorial

感谢Murtuza Chhil responseISOMsg parallel request to multiple MUX jpos 线程,您还可以使用加入参与者,如 Parallel Processing 中所述。并行进行两个查询。

关于java - 来自多个交易参与者 jpos 的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48399339/

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