Java Cometd Oort群集-Spring配置

Java Cometd Oort群集-Spring配置,java,spring,cometd,Java,Spring,Cometd,我试图在我们的Comet应用程序中启用Oort和多播,如下示例。我现在只需要一个奥尔特。不是Seti部分。但奥尔特似乎不起作用。我启用了cometd调试,但没有看到Oort被初始化 我还通过在本地(不同端口上)运行两个Oort节点实例(例如A和B)进行了测试。让客户端连接到节点A。然后,我将在/user/*通道上发布来自节点A的消息,客户端将接收该消息。但若我发布来自节点B的消息,客户端将不会得到任何信息 弹簧配置: import org.cometd.annotation.ServerAnno

我试图在我们的Comet应用程序中启用Oort和多播,如下示例。我现在只需要一个奥尔特。不是Seti部分。但奥尔特似乎不起作用。我启用了cometd调试,但没有看到Oort被初始化

我还通过在本地(不同端口上)运行两个Oort节点实例(例如A和B)进行了测试。让客户端连接到节点A。然后,我将在
/user/*
通道上发布来自节点A的消息,客户端将接收该消息。但若我发布来自节点B的消息,客户端将不会得到任何信息

弹簧配置:

import org.cometd.annotation.ServerAnnotationProcessor;
导入org.cometd.bayeux.server.BayeuxServer;
导入org.cometd.oort.oort;
导入org.cometd.oort.OortMulticastConfigServlet;
导入org.cometd.oort.OortMulticastConfigurer;
导入org.cometd.server.BayeuxServerImpl;
导入org.cometd.server.transport.AsyncJSONTransport;
导入org.cometd.server.transport.JSONTransport;
导入org.cometd.websocket.server.WebSocketTransport;
导入org.slf4j.Logger;
导入org.slf4j.LoggerFactory;
导入org.springframework.beans.BeansException;
导入org.springframework.beans.factory.config.DestructionAwareBeanPostProcessor;
导入org.springframework.context.annotation.Bean;
导入org.springframework.context.annotation.Configuration;
导入org.springframework.web.context.ServletContextAware;
导入javax.annotation.PostConstruct;
导入javax.servlet.ServletContext;
@配置
公共类BayeuxinInitializer实现DestructionAwareBeanPostProcessor,ServletContextAware{
专用服务器AnnotationProcessor;
私有服务上下文;
@施工后
私有void init(){
BayeuxServer BayeuxServer=BayeuxServer();
this.processor=新服务器AnnotationProcessor(bayeuxServer);
Oort-Oort=Oort();
oort.observeChannel(“/user/*”);
}
公共对象后处理BeforeInitialization(对象bean,字符串名称)抛出BeansException{
processDependencies(bean);
processConfigurations(bean);
processCallbacks(bean);
返回豆;
}
公共对象后处理AfterInitialization(对象bean,字符串名称)抛出BeansException{
返回豆;
}
public void PostProcessBeforeDestroyment(对象bean、字符串名称)引发BeansException{
processor.deprocessCallbacks(bean);
}
@Bean(initMethod=“开始”,destromethod=“停止”)
公共BayeuxServer BayeuxServer(){
bayeuxserverimplbean=新的BayeuxServerImpl();
setTransports(新的WebSocketTransport(bean)、新的JSONTransport(bean)、新的AsyncJSONTransport(bean));
setOption(“超时”,60000);
setOption(“ws.timeout”,60000);
setOption(“maxSessionsPerBrowser”,20);
setOption(ServletContext.class.getName(),context);
setOption(“cometdURLMapping”,“/,/svc”);
setAttribute(BayeuxServer.ATTRIBUTE,bean);
返回豆;
}
@Bean(initMethod=“开始”,destromethod=“停止”)
公共奥尔特奥尔特(){
Oort Oort=新Oort(bayeuxServer(),”http://localhost:8094/comet/svc");
setAttribute(Oort.Oort\u属性,Oort);
返回奥尔特;
}
@凌驾
公共void setServletContext(ServletContext ServletContext){
this.context=servletContext;
}
}
web.xml:


降临
org.cometd.server.CometDServlet
1.
只是初始化Oort对象。cometd如何知道它是多播的还是静态的
cometd版本:3.0.10

码头版本:9.3.11


感谢您的帮助

通过Spring(或其他嵌入代码)创建
Oort
对象时,您已经创建了一个节点,但它没有链接到其他Oort节点

在代码中,您可以调用:

Oort-Oort=Oort();
oort.observeChannel(“/user/*”);
这将创建节点,将其配置为观察来自其他节点的通道
/user/*
上的消息,但不会将其与其他节点连接

在您链接的示例中,有一个缺少的片段,它在其中调用:

oort.observeComet(“http://cloud.cometd.org/cometd");
该调用在示例中被注释掉,因为作为示例,它不知道另一个节点的确切URI,因此示例使用
http://cloud.cometd.org/cometd
,但该URI不指向现有节点-这就是注释掉的原因

现在,由于您希望使用多播,您链接的示例建议使用
oortmulticcastconfigurer

OortMulticastConfigurer
是您在
web.xml
中成功使用的
OortMulticastConfigServlet
所使用的内容

让我们看看
oortmulticastconfigureservlet
如何使用
OortMulticastConfigurer

如您所见,
OortMulticastConfigurer
已创建、配置并启动

如果保持默认值,则最小代码为:

configurer=新的oort多播配置器(oort);
configurer.start();

将这两行代码添加到您的
BayeuxInitializer.init()
方法中,您就可以开始了。

当您通过Spring(或其他嵌入式代码)创建
Oort
对象时,您已经创建了一个节点,但它没有链接到其他Oort节点

在代码中,您可以调用:

Oort-Oort=Oort();
oort.observeChannel(“/user/*”);
这将创建节点,将其配置为观察来自其他节点的通道
/user/*
上的消息,但不会将其与其他节点连接

在您链接的示例中,有一个缺少的片段,它在其中调用:

oort.observeComet(“http://cloud.cometd.org/cometd");
该调用在示例中被注释掉,因为作为示例,它不知道另一个n的确切URI