Forum Replies Created
-
AuthorReplies
-
Robert, thx, while that does not get the site in problem to work, your list is very useful for future issues. Russ, Thank you for going along with this thread. Have tried the TCP/IP before we tried translation throttling. I believe that with both methods used, the performance would be much faster. But we have decided against it becuase it will make tracing the message miuch more difficult. If a message failed at the outbound, we will use DB Administrator to get the source MID of the message and use SMAT to get the raw message back. With this setup we won’t be able to trace back to the source message.
I don’t know that cross-process routing is slow. Thanks for pointing that out. But since my outbound is java upoc and is cpu intensive as well, so I am not so sure if it is beneficial to put it in the same process as the inbound thread. As for the ACK, I think that’s a good idea, but it doesn’t work in my case because the inbound messages is sent to two outbound threads and some of the messages will get dropped during translation.
By the way, it would also be nice if someone can shed some light on how to further prioritize the command thread over the translation. Even with throttling set to (1, 1, 50) which means that only 1 message is translated everytime, there are still lots of messages left in the post-transaltion queue. Is there any way to force the command thread to move those messages to the outbound thread prior to translating more messages? The outbound thread is in another process, so having those messages moved to the outbound thread first will speed things up.
I am sure that the outbound thread is not saturated yet since the message out count increases faster when it is being feed with messages continuously than when most messages are stuck in the post-translation queue. By the way, it never gets any pending messages.
That’s what I have just figured out as well. However, it seem that I did not pay attention to the true problem. The true problem is that the outbound thread is slower than the inbound thread. As such, no matter what I do there will be a large number of messages being queued in the recovery db unless I choose a very long read interval for the inbound thread. In any case, it would be very difficult to optimize for the maximum speed.
It would be ideal if cloverleaf can “wait” on the inbound thread whenever it has nothing to do.
James, You can use a repeat while segmentName.fieldName to determine if the message consists of a certain frl.
You can use a condition on previousSegmentName.fieldName to determine if a message consists of a certain frl based on the existence of a previous segment.
These allows us to parse the following structure:
HL
[TRN]
[NM1]
[EQ]
[AMT]
[III]
[REF]
[N3]
[N4]
[PER]
[PRV]
[DMG]
[INS]
[DTP]
by doing
Top.hrl
HL Segment (with repeat while HL.Field6-8 is ‘HL ‘) pointing to HL.frl
Group Segment (with condition HL.Field6-8 is ‘HL ‘) pointing to Group.hrl
Group.hrl
TRN Segment (with repeat while TRN.Field6-8 is ‘TRN’) pointing to TRN.hrl
.
.
.
I have trouble adding another layer of repeatition to handle the outer loop though. I will get back to this board if I have any new insights. And please let me know if you found out anything. Thanks.
While I don’t fully understand the sample data and your message structure, I suspect that there could be a fundamental problem. Assuming that the [TRN], [NM1] are optional segments, when Cloverleaf is parsing a message without TRN but has a NM1 segment, how would it be possible for Cloverleaf to recognize what it is seeing is an NM1 instead of a TRN?
Please also note that the ‘Condition Options’ determines the presence/absence of a segment using a field from a previous segment.
I would expect a very complicated and intelligent setup in order for this to work if it is at all possible. It would be nice if you can provide a more detailed view on your sample data as well as your message structure. For instance, does every segment ends with a new line character? Does the 6-8 characters always presence regardless of the presence of the segment?
What is the exact configuration of your outbound thread? Both the setString and the setObject function requires the name of the field. Dear Greg, Thank you very much for your answer.
I have not tried that but that would not work because if the field is placed on the input list instead of the output list, the xpm object would not have the field in its output list and the value cannot be set using the setSting function. I guess we can put the same field in both the input list and the output list to get this to work. But I wish to do it more elegantly.
-
AuthorReplies