我在
messaging-config.xml
文件中配置了一个目标,用于侦听 PolicyCenter 中的文档实体,特别是文档创建事件。默认情况下,此目标在帐户级别设置为安全排序。我们希望更改此配置,以便在不考虑帐户的情况下发送所有文档,从而使目的地不安全排序。据我了解,在PolicyCenter
中,默认的安全排序是在帐户级别,唯一可用的备用主要实体选项是联系人。有没有办法将此目的地配置为非安全排序?
在消息目标配置中,您将看到一个名为“无主消息”的字段。如果您只想尽快将数据推出 InsuranceSuite,而不考虑顺序,请选择“多线程”,然后确保主对象为空。如果有带有主要对象的消息可以安全排序,则没有主要对象的消息将切到行的前面。当您拥有主要对象时,您仍然可以安全订购。查看我在 ClaimCenter 中整理的示例代码,以演示该行为。它创建了一个演示消息目标,我们将在该目标上发送安全排序和非安全排序的消息。
首先,创建这个虚拟实体。请注意,我已使其具有事件意识。这一点至关重要。如果没有事件标签,这将无法工作。
<?xml version="1.0"?>
<entity
xmlns="http://guidewire.com/datamodel"
entity="TestEntity"
desc="TestEntity"
table="testentity"
type="retireable">
<events/>
<column
name="DummyColumn"
nullok="true"
type="longtext"/>
</entity>
现在创建一个新的消息目标,通过将其添加到 messages-config.xml 来侦听自定义事件:
<destination
id="3"
multithreadnonsafeorderedmessages="true"
name="TestNotOrdered"
numsenderthreads="10"
transportplugin="NotSafeOrderedTransport">
<event
name="NotSafeOrderedEvent"/>
</destination>
将此插件配置添加到您的插件注册表中,并将其命名为 NotSafeOrderedTransport.gwp:
<?xml version="1.0"?>
<plugin
interface="MessageTransport"
name="NotSafeOrderedTransport">
<plugin-gosu
gosuclass="test.NotSafeOrderedPlugin"/>
</plugin>
添加然后添加 Transport 插件的 Gosu 实现:
package test
uses gw.plugin.messaging.MessageTransport
class NotSafeOrderedPlugin implements MessageTransport {
override function send(message : Message, transformedPayload : String) {
print (Thread.currentThread().Name + " Sending message with messageroot " + message.MessageRoot)
Thread.sleep(2000); //sleep for 2 seconds to simulate doing something
print (Thread.currentThread().Name + " Finished sending " + message.MessageRoot)
message.reportAck()
}
override function shutdown() {
}
override function suspend() {
}
override function resume() {
}
override property set DestinationID(destinationID : int) {
}
}
现在,在调试模式下启动 ClaimCenter。 在 Gosu Scratchpad 中运行以下脚本。它的作用是创建一堆包含消息的安全有序的主要实体。它们会按顺序进行,对此你无能为力。但随后它根据我们的自定义实体添加了一堆非安全有序事件。由于它们的主要实体为空,因此它们将立即跳到队列的前面,跳过所有基于声明的实体。您还会注意到,它们是无序处理的。因此,如果您想推送基于声明的消息,您需要清空主要实体,或在另一个实体上触发事件。
var claim = Claim.finder.findClaimByClaimNumber("000-00-000003")
gw.transaction.Transaction.runWithNewBundle(\bundle->{
for (x in 0..100){
claim = bundle.add(claim)
claim.addEvent("NotSafeOrderedEvent")
}
},User.util.getUnrestrictedUser())
Thread.sleep (10000) //sleep for 10 seconds and watch how ClaimCenter processes these claims in order
//now add 100 of these nonsafe ordered entity-based messages, and see how we're fully utilizing all configured threads
//and processing them far faster
gw.transaction.Transaction.runWithNewBundle(\bundle->{
for (x in 0..100){
var session = bundle.add(new TestEntity())
session.DummyColumn = "dummy"
session.addEvent("NotSafeOrderedEvent")
}
},User.util.getUnrestrictedUser())