Hi We currently have a process which subscriber to ric based on user request. Request goes as below
Step 1 : User request for RIC : ABC FID : 1 -> Process would place a view requesting for RIC and FID 1 in response
Step 2 : User request for RIC : ABC FID : 2 -> Process would place a view requesting for RIC and FID 1 and 2 in response
Step 3 : User is not actively looking at the RIC : ABC anymore. Our process would deregister the subscription as there is no active interest.
Step 4 :User at later point expresses interest to look at RIC : ABC. We would then create a new Subscription requesting for FID 1, followed by FID 1 and 2.
We observed when we resubscribe for the ric in step 4, we dont get responses certain time.
Below is how we frame the request in both the cases
private static Triple<OMMPool, OMMEncoder ,OMMMsg> buildRecordSubMsg(RmdsRecordKey recordKey, Set<RField> keys) { OMMEncoder encoder = subscriptionPool.acquireEncoder(); OMMMsg ricSubMsg = subscriptionPool.acquireMsg(); ricSubMsg.setMsgType(OMMMsg.MsgType.REQUEST); ricSubMsg.setMsgModelType(RDMMsgTypes.MARKET_PRICE); ricSubMsg.setPriority((byte) 1, 1); ricSubMsg.setAttribInfo(recordKey.serviceName, recordKey.ric, RDMInstrument.NameType.RIC); ricSubMsg = addView(ricSubMsg, keys, encoder); return Triple.of(subscriptionPool, encoder, ricSubMsg); } private static OMMMsg addView(OMMMsg msg, Set<RField> keys, OMMEncoder encoder) { return addView(msg, keys, encoder, null); } private static OMMMsg addView(OMMMsg msg, Set<RField> keys, OMMEncoder encoder, Integer indicationFlags) { if (indicationFlags == null) { msg.setIndicationFlags(OMMMsg.Indication.VIEW); } else { msg.setIndicationFlags(indicationFlags | OMMMsg.Indication.VIEW); } // @formatter:off encoder.initialize(OMMTypes.MSG, 2000); encoder.encodeMsgInit(msg, OMMTypes.NO_DATA, OMMTypes.ELEMENT_LIST); encoder.encodeElementListInit(OMMElementList.HAS_STANDARD_DATA, (short) 0, (short) 0); encoder.encodeElementEntryInit(RDMUser.View.ViewType, OMMTypes.UINT); encoder.encodeUInt(RDMUser.View.FIELD_ID_LIST); encoder.encodeElementEntryInit(RDMUser.View.ViewData, OMMTypes.ARRAY); encoder.encodeArrayInit(OMMTypes.INT, 0); Object[] rmdsKeys = keys.toArray(); for(Object key : rmdsKeys){ encoder.encodeArrayEntryInit(); encoder.encodeInt(((RField)key).id); } encoder.encodeAggregateComplete(); encoder.encodeAggregateComplete(); // @formatter:on OMMMsg viewSubMsg = (OMMMsg) encoder.getEncodedObject(); return viewSubMsg; }