We are facing a strange issue with Pub/sub machanism, whenever the IS restarts, the documents getting published during the restart interval getting lost though our Docs are Guaranteed.
I made a check in Broker Queue and couldnt find the Documents queued there and checked in the Trigger service usage and the trigger service got executed for the Published document but can’t find the package logs for the executed service. i.e. service didn’t perform the functions it should do. Even we dont find any Exceptions in the server logs.
But after the restart time, say 10 mins, the documents getting published and the subscription service executed successfully. We can see the Package logs of the subscription service.
Any suggestions on what causing the document to be lost.
Thansks in advance.
The guaranteed documents will be moved to outbound document store if the broker server is unavailable. As you mentioned, the broker server is up and running but you restarted the IS server. In this case how can you publish the doc to the broker when the publishing server (IS) is not available.
Are you working in the clustered environment? Whether the outbound doc store has configured?
Our Broker server is up and running. As i mentioned we are using JMS trigger, so the documents will be publised from the external source but not webMethods. When the trigger is in suspended mode, i can see the documents in the queue. i.e. the document publish from the external source(eGate) is successful. so, our Trigger should pick up and process it successfully. It does when IS is up and running and the messages getting lost when the IS restarting.
From the Document if the Subscription service executes successfully, it’ll acknowledge broker and it’ll remove the doc from the Broker queue. In case of failure(service Exception/Transient error) it should throw an Exception and we should see them in server logs. But the service neither exceuted successfully as we didn’t get the package logs nor the service fails as we didn’t get the Exceptions in server logs. so, i’m wondering where the docs went …
As external systems sending the documents to the wM Broker and you are just subscribing it, could you just tell us whether you have configured durable subscription ?
In case of durable subscription, IS should receive the message even if its not connected. For non-durable message is lost if the subscriber is not connected when the message was sent.
Yes, we have configured the Durable Subscriber. I can see the Document in the Durable subscriber when IS is down and once the IS came up, the document has been subscribed. i.e. IS trigger received the document and executed the Subscription service. I’m saying the IS executed the Subscription service because i can see the service usage at the time when IS fully came up.
So, now the problem is IS executed the Subscription service but the message not processed and also the message not stored in Broker queue.It’s not happening at once but it happens all the time whenever we restart the IS.
The issue was with JMS triggers. So, to resolve the problem
We have to use a combination of JMS Connection Alias classloader and package dependency configuration.
Example : If you have a JMS trigger “TRIGGER-A” in package “PACK-A” using a connection alias “CONN-A”.
If CONN-A is set to use classloader(*) PACK-A, then TRIGGER-A will not start until the PACK-A startup service has completed.
If PACK-A has a dependency on PACK-B, then TRIGGER-A will not start until PACK-B’s startup service has completed.
In short terms : Create a separate package which contains the trigger, make it dependent on the package which has the startup service.