2013-04-10 60 views
1

我在处理来自客户端的订阅请求并根据请求执行某些处理时遇到问题。我希望能够在服务器上收到传入订阅请求时调用方法并执行一些处理。我查看了下面的CometD文档,并尝试了“订阅配置支持”中列出的示例,但我没有太多运气。CometD订阅监听器

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

我已经创建使用一个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(); 
    } 

回答

3

看一看的documentation for annotated services,并且还向CometD concepts

如果我正确地阅读了您的问题,您希望能够在客户端订阅频道时执行某些逻辑,而不是在消息到达该频道时执行。

您混淆了@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 
    } 
} 
+0

感谢您的意见。我会看看你提供的链接。 – user676567 2013-04-10 10:50:14