Apache flex BlazeDS中的多个通道

Apache flex BlazeDS中的多个通道,apache-flex,blazeds,Apache Flex,Blazeds,我正在尝试设置一个场景,让Flex应用程序能够使用在两个实现BlazeDS的不同web应用程序中编写的资源 我最初尝试通过,然后将其设置为mxml中服务的通道集。然而,尽管这样做有效,我还是得到了重复的会话错误 有人建议我可以/应该考虑设置具有不同端点的通道。我猜这意味着Flex应用程序将只连接到它所看到的一个服务,但该服务实际上也将从另一个位置提供该服务 我尝试在services-config.xml中执行以下操作: <channel-definition id="my-

我正在尝试设置一个场景,让Flex应用程序能够使用在两个实现BlazeDS的不同web应用程序中编写的资源

我最初尝试通过,然后将其设置为mxml中服务的通道集。然而,尽管这样做有效,我还是得到了重复的会话错误

有人建议我可以/应该考虑设置具有不同端点的通道。我猜这意味着Flex应用程序将只连接到它所看到的一个服务,但该服务实际上也将从另一个位置提供该服务

我尝试在services-config.xml中执行以下操作:

        <channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel">
            <endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amf" class="flex.messaging.endpoints.AMFEndpoint"/>
        </channel-definition>

        <channel-definition id="my-amf2" class="mx.messaging.channels.AMFChannel">
            <endpoint url="http://localhost:7001/dataservice1/messagebroker/amf" class="flex.messaging.endpoints.AMFEndpoint"/>
        </channel-definition>

但是,在尝试启动服务器时,我在weblogic控制台中遇到以下错误

无法注册终结点“my amf”,因为其URL, “/messagebroker/amf”已由终结点“my-amf2”使用

“MessageBrokerServlet”无法在Web中启动时预加载 应用程序:“/dataservice2”。 flex.messaging.config.ConfigurationException:无法注册 端点“my amf”,因为它的URL“/messagebroker/amf”已经存在 由端点“my-amf2”使用

无法将应用程序的激活状态设置为true “_appsdir_DataService2_dir”。weblogic.application.ModuleException: [HTTP:101216]Servlet:“MessageBrokerServlet”无法在上预加载 在Web应用程序中启动:“/dataservice2”

我猜这是因为您只能有一个mx.messaging.channels.AMFChannel类频道。这是正确的吗

总的来说,有没有办法解决我遇到的任何问题?我对不同的解决方案持开放态度

我在谷歌上搜索了好几个小时,读了好几个小时,但是找不到关于这个的任何东西


我们希望有一个在所有应用程序之间共享的通用功能服务,以及一个提供特定于该应用程序的服务的特定于应用程序的服务。

我将简要介绍我们所讨论的内容,以便其他读者能够从中受益

让我们仔细看看错误消息:

无法注册终结点“my amf”,因为其URL, “/messagebroker/amf”已由终结点“my-amf2”使用

它提到了“/messagebroker/amf”,没有提到前面URL的部分,即带有端口号的部分。由此我们可以得出,当BlazeDS确定两个端点是否相同时,它只是忽略了第一部分。因此,即使它们指向不同的实例,也会被认为是相同的

快速修复

解决这个问题的一个简单方法是简单地重命名最后一个正斜杠后的第二个端点。例如,我们应该已经做到了。我认为您不需要担心任何其他问题,因为MessageBroker servlet在最后一个斜杠(
/MessageBroker/*
)后面有一个通配符映射,它将把任何像这样格式化的地址路由到正确的servlet

但是为什么呢?


也许你应该重新考虑你为什么要这么做。BlazeDS只检查最后一部分的原因是,开发人员可能根本没有想到有人会尝试将端点指向另一个实例。此外,在您的设置中,此其他实例已具有相同的通道定义。您可以简单地连接到该通道,这样就不需要从第一个实例进行路由。我不知道你想要达到什么,所以我只能告诉你,你可能从错误的角度接近它。

有点离题,但你考虑使用吗?通过支持WebLogic的异步servlet,它将为您提供更好的实时消息传递性能/可伸缩性(请参阅和)。连接到两个不同的webapp也不应该是问题,因为两个消息上下文(频道定义等)将保存在单独的servlet上下文中。

我认为,正如错误消息所说,您应该为my-amf2提供不同的端点URL。当然,您必须在web.xml中设置servlet。您必须原谅我的无知:据我所知,URL已经不同了,因为它有不同的端口。我真的不知道该怎么办。你能详细说明一下吗?非常感谢。你确定这是不同的吗?从我所看到的
{server.port}
令牌很可能被替换为相同的端口。你可以使用FireBug或者精确地监视它试图连接的地址。我100%确定。启动dataservice2的服务器位于端口7002上,另一个服务(dataservice1)位于端口7001上。我无法使用FireBug进行检查,因为服务器甚至无法正常启动。我不这么认为:已经有不同的通道具有不同的端点(我的amf、我的轮询amf、我的流式amf等等)。但我一直在重新阅读该错误消息,BlazeDS似乎只是使用“/messagebroker/amf”来验证端点是否已经注册。在这种情况下,您可以通过更改servlet名称(例如,更改为“/messagebroker/amf2”)或创建新的servlet来解决此问题。为此,您只需更改端点url,因为我认为它将自动映射到MessageBrokerServlet。“/messagebroker/”部分是必需的。由于它是到目前为止讨论的所有内容的优秀总结,因此您的答案获得了支持。此后,我决定按照您的建议,使用跨不同项目使用的通用代码库(这有其优点和缺点),尝试从不同的角度来处理它。