Слушатели подписки CometD

У меня проблема с обработкой запросов на подписку от клиентов и выполнением некоторой обработки на основе запроса. Я хотел бы иметь возможность вызывать метод и выполнять некоторую обработку при получении входящего запроса на подписку на сервере. Я посмотрел следующую документацию по CometD и попробовал пример, описанный в разделе "Поддержка конфигурации подписки", но мне не очень повезло.

http://www.cometd.org/documentation/2.x/cometd-java/server/services/annotated

Я уже создал Bayeux Server, используя Spring Bean, и я могу публиковать данные для других имен каналов, которые я создал на стороне сервера. Любая помощь или дополнительная информация. по теме будет оценен!

Пример кода, который я использую:

@Service("CometDSubscriptionListener")
public class CometDSubscriptionListener {

    private final String channel = "/subscription";
    private static final Logger logger = Logger.getLogger(CometDSubscriptionListener.class);    
    private Heartbeat heartbeat;

    @Inject
    private BayeuxServer bayeuxserver; 

    @Session
    private ServerSession sender;

    public CometDSubscriptionListener(BayeuxServer bayeuxserver){       
        logger.info("CometDSubscriptionListener constructor called");       
    }

    @Subscription(channel)  
    public void processClientRequest(Message message)
    {   
        logger.info("Received request from client for channel " + channel);
        PublishData();  
    }

1 ответ

Ознакомьтесь с документацией по аннотированным сервисам, а также с концепциями CometD.

Если я правильно прочитал ваш вопрос, вы хотите иметь возможность выполнять некоторую логику, когда клиенты подписываются на канал, а не когда сообщения поступают на этот канал.

Вы путаете смысл @Subscription аннотации, поэтому прочитайте ссылки выше, которые должны уточнить его семантику.

Чтобы сделать то, что я понял, вы хотите сделать это, вам нужно это:

@Service
public class CometDSubscriptionListener 
{
    ...

    @Listener(Channel.META_SUBSCRIBE)  
    public void processSubscription(ServerSession remote, ServerMessage message)
    {   
        // What channel the client wants to subscribe to ?
        String channel = (String)message.get(Message.SUBSCRIPTION_FIELD);

        // Do your logic here
    }
}
Другие вопросы по тегам