在策略中心中将文档实体目标设置为非安全排序

问题描述 投票:0回答:1

我在

messaging-config.xml
文件中配置了一个目标,用于侦听 PolicyCenter 中的文档实体,特别是文档创建事件。默认情况下,此目标在帐户级别设置为安全排序。我们希望更改此配置,以便在不考虑帐户的情况下发送所有文档,从而使目的地不安全排序。据我了解,在
PolicyCenter
中,默认的安全排序是在帐户级别,唯一可用的备用主要实体选项是联系人。有没有办法将此目的地配置为非安全排序?

guidewire
1个回答
0
投票

在消息目标配置中,您将看到一个名为“无主消息”的字段。如果您只想尽快将数据推出 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())
© www.soinside.com 2019 - 2024. All rights reserved.