Post

2 followers Follow
0
Avatar

AsyncEventQueue without a WAN MultiSite behavior

Hi,

I'm trying to resolve a situation in my system but I found a problem. I have two or more clients in a distributed system using mcast port. In this clients I'm declaring a AsyncEventQueue in this way.

<async-event-queue id="transactionQueue" persistent="true"
disk-store-name="transaction-queue-disk-store" parallel="false"
batch-size="1" dispatcher-threads="1">
<async-event-listener>
<class-name>com.infrastructure.gemfire.listener.SendTransactionAsyncEventListener</class-name>
</async-event-listener>
</async-event-queue>

The ideas is that I don't want that this queue is using in a distributed way, I want that each client has this queue and and behaves independently.
But in the cache log I'm reading the next messages.

Region /AsyncEventQueue_transactionQueue_SERIAL_GATEWAY_SENDER_QUEUE has potentially stale data. It is waiting for another member to recover the latest data.

My persistent id:

DiskStore ID: f6c9a13e-7ce4-4431-8813-fda88532030d
Name: CLIENT-1
Location: /172.29.1.33:.\data\local-transaction

Members with potentially new data:
[
DiskStore ID: dd00a343-fc2c-479d-824a-b336cb907feb
Name: CLIENT-2
Location: /172.29.1.33\data\local-transaction
]

How I can do that? Is there a parameter to change this behavior in the AsyncEventQueue?
Thanks,

Juan Manuel

Juan Manuel Romera Ferrio

Please sign in to leave a comment.

2 comments

0
Avatar

This is the design of the serial AsyncEventQueue. For the same id, one member has the primary AsyncEventQueue, and the other member(s) have the secondaries. In this case, the id="transactionQueue".

The way to implement what you want is to give the AsyncEventQueue a different id in each member. Then, they will act independently.

How are the region(s) defined that are using the AsyncEventQueue? If they are local, then all you should need to do is to change the async-event-queue-ids to point to the new id. If they are replicated or partitioned, then its more complicated. You'll have to:

  • add a local proxy region between the real region and the AsyncEventQueue and a CacheListener to forward events from the real region to the local proxy region
  • remove the async-event-queue-ids from the real region and set it on the local proxy region

I can send you an example of this if you need it.

Barry Oglesby 0 votes
0
Avatar

Barry thanks for you answer.

I was thinking that using different ids for the AsyncEventQueue is a solution, so I will continue for this way.
The regions that I defined are local so only change the id pointed to the queue.

Thanks,
Juan Manuel.

Juan Manuel Romera Ferrio 0 votes