code: public DevVarLongStringArray subscribe(final String deviceName, final AttributeImpl attribute,
                                             final EventType eventType, final int idlVersion) throws DevFailed {
          xlogger.entry();
          // If first time start the ZMQ management
          if (!isInitialized) {
              initialize();
          }
  
          // check if event is already subscribed
          final String fullName = EventUtilities.buildEventName(deviceName, attribute.getName(), eventType, idlVersion);
          EventImpl eventImpl = eventImplMap.get(fullName);
          if (eventImpl == null) {
              // special case for forwarded attribute, subscribe to root attribute
              if (attribute.getBehavior() instanceof ForwardedAttribute) {
                  final ForwardedAttribute fwdAttr = (ForwardedAttribute) attribute.getBehavior();
                  fwdAttr.subscribe(eventType);
              }
              // If not already manage, create EventImpl object and add it to the map
              eventImpl = new EventImpl(attribute, eventType, idlVersion, fullName);
              eventImplMap.put(fullName, eventImpl);
          } else {
              eventImpl.updateSubscribeTime();
          }
          logger.debug("starting event {}", fullName);
          return buildConnectionParameters(fullName);
      }
docs: Initialize ZMQ event system if not already done,
  subscribe to the specified event end
  returns the connection parameters for specified event.
  
  @param deviceName The specified event device name
  @param attribute  The specified event attribute
  @param eventType  The specified event type
  @return the connection parameters for specified event.