thisの例で私たちのCometアプリケーションでOortをマルチキャストで有効にしようとしています。私は今すぐオートが必要です。 Setiの部分ではありません。しかしOortは動作していないようです。私はcometdデバッグを有効にしており、Oortが初期化されていないのがわかります。Cometd Oort Cluster - Springの設定
私はローカル(異なるポート上)で2つのOortノードのインスタンスを実行してテストしました。たとえば、AとBです。クライアントをノードAに接続させます。ノードAからのメッセージを/user/*
チャネルとクライアントそれを受け取る。しかし、ノードBからのメッセージを公開すると、クライアントは何も取得しません。
Spring構成:
import org.cometd.annotation.ServerAnnotationProcessor;
import org.cometd.bayeux.server.BayeuxServer;
import org.cometd.oort.Oort;
import org.cometd.oort.OortMulticastConfigServlet;
import org.cometd.oort.OortMulticastConfigurer;
import org.cometd.server.BayeuxServerImpl;
import org.cometd.server.transport.AsyncJSONTransport;
import org.cometd.server.transport.JSONTransport;
import org.cometd.websocket.server.WebSocketTransport;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.DestructionAwareBeanPostProcessor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.ServletContextAware;
import javax.annotation.PostConstruct;
import javax.servlet.ServletContext;
@Configuration
public class BayeuxInitializer implements DestructionAwareBeanPostProcessor, ServletContextAware {
private ServerAnnotationProcessor processor;
private ServletContext context;
@PostConstruct
private void init() {
BayeuxServer bayeuxServer = bayeuxServer();
this.processor = new ServerAnnotationProcessor(bayeuxServer);
Oort oort = oort();
oort.observeChannel("/user/*");
}
public Object postProcessBeforeInitialization(Object bean, String name) throws BeansException {
processor.processDependencies(bean);
processor.processConfigurations(bean);
processor.processCallbacks(bean);
return bean;
}
public Object postProcessAfterInitialization(Object bean, String name) throws BeansException {
return bean;
}
public void postProcessBeforeDestruction(Object bean, String name) throws BeansException {
processor.deprocessCallbacks(bean);
}
@Bean(initMethod = "start", destroyMethod = "stop")
public BayeuxServer bayeuxServer() {
BayeuxServerImpl bean = new BayeuxServerImpl();
bean.setTransports(new WebSocketTransport(bean), new JSONTransport(bean), new AsyncJSONTransport(bean));
bean.setOption("timeout", 60000);
bean.setOption("ws.timeout", 60000);
bean.setOption("maxSessionsPerBrowser", 20);
bean.setOption(ServletContext.class.getName(), context);
bean.setOption("cometdURLMapping", "/,/svc");
context.setAttribute(BayeuxServer.ATTRIBUTE, bean);
return bean;
}
@Bean(initMethod = "start", destroyMethod = "stop")
public Oort oort() {
Oort oort = new Oort(bayeuxServer(), "http://localhost:8094/comet/svc");
context.setAttribute(Oort.OORT_ATTRIBUTE, oort);
return oort;
}
@Override
public void setServletContext(ServletContext servletContext) {
this.context = servletContext;
}
}
のweb.xml:私は以下のようにweb.xmlにそれを初期化する場合
<servlet>
<servlet-name>cometd</servlet-name>
<servlet-class>org.cometd.server.CometDServlet</servlet-class>
<load-on-startup>1</load-on-startup>
<async-supported>true</async-supported>
</servlet>
<servlet-mapping>
<servlet-name>cometd</servlet-name>
<url-pattern>/svc/*</url-pattern>
</servlet-mapping>
オールトが動作しているようだ:
<servlet>
<servlet-name>cometd</servlet-name>
<servlet-class>org.cometd.server.CometDServlet</servlet-class>
<load-on-startup>1</load-on-startup>
<async-supported>true</async-supported>
</servlet>
<servlet-mapping>
<servlet-name>cometd</servlet-name>
<url-pattern>/svc/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>oort</servlet-name>
<servlet-class>org.cometd.oort.OortMulticastConfigServlet</servlet-class>
<init-param>
<param-name>oort.url</param-name>
<param-value>http://localhost:8094/comet/svc</param-value>
</init-param>
<init-param>
<param-name>oort.channels</param-name>
<param-value>/user/*</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
しかしとしてバージョンでBayeuxServerが初期化されている場合は、Springで初期化する必要があります。だから私の質問は:
- 私のOort Springの設定に何か問題はありますか?
- Oortはweb.xmlの初期化で動作することを考慮すると、それを行う上で問題はありますか(Spring自体のBayeuxServer設定を維持する)か?
- 例hereは、Oortオブジェクトを初期化するだけです。 cometdはそのマルチキャストかスタティックかをどのように知っていますか?
cometdバージョン:3.0.10
桟橋のバージョン:9.3.11
すべてのヘルプ感謝!
これは完全に機能しました。ありがとう@スボルデ!そして私たちに彗星を与えてくれてありがとう! –