配置多宿主托管
SIP 容器可从 SIP 代理接受出站接口列表并对任何 SIP 应用程序公开该列表。
开始之前
设置多宿主环境后,在 WebSphere® SIP 代理上配置多宿主托管。多宿主拓扑可能包括在每个可用代理服务器上设置多个网络(路由器、交换机等)、多个负载均衡器(如果需要对每个虚拟 IP
配置多个代理服务器)及多个网卡。安装网卡并配置回送地址后,在每个 SIP 代理中为每个可用网络接口设置单独的 SIP 代理通道链。
注意: 只能将 SIP
代理服务器配置为支持多个接口。SIP 容器不支持此功能。
关于此任务
多宿主允许您让单个应用程序与不同网络上的不同用户代理客户机 (UAC) 和用户代理服务器 (UAS) 通信。
该应用程序会查询 SIP 容器以使用 JSR 289 定义的标准过程来确定可用出站接口列表。这是通过容器中保存的上下文属性(通过与所有可用 SIP 代理进行协议交换)完成的。此属性为 javax.servlet.sip.SipServlet.OUTBOUND_INTERFACES,它被定义为 javax.servlet.sip.outboundInterfaces。此属性包含所有可用接口。“示例”部分中的样本代码显示如何访问应用程序中的该属性。
在每个 SIP 代理上配置接口后,遵循过程中的步骤以控制出站消息的路由。如果使用多个代理,那么以完全相同的方式配置每个代理很重要。
如果应用程序未指定要用于发送出站请求的接口,那么代理会使用缺省接口。建议对每个协议设置缺省接口。有关更多信息,请参阅步骤 5。
管理员可选择设置三个 SIP 代理定制属性,这些属性用于定义链名,链名定义 SIP 应用程序未调用 setOutboundInterface 方法时要使用的相应接口。如果未设置这些定制属性并且未使用 setOutboundInterface 方法,那么无法最终确定将用于出站请求的接口。
以下过程适用于包含用于带有多个网络接口的多宿主托管的单个代理设置的拓扑。
过程
结果
示例
以下样本代码说明如何获取可用出站接口并在会话对象上设置相应出站接口。
....
import javax.servlet.sip.SipServlet;
import javax.servlet.sip.SipSession;
....
protected void doInvite(SipServletRequest req1) throws ServletException, IOException
{
...
// This block of code handles setting of the outbound interface.
SipSession sipSession = req1.getSession();
javax.servlet.ServletContext context = getServletContext();
java.util.List list = (java.util.List)context.getAttribute(javax.servlet.sip.SipServlet.
OUTBOUND_INTERFACES);
SipURI uri = getProtocolInterface ("udp", list);
if (uri != null)
{
InetSocketAddress inetSocketAddr = new InetSocketAddress(uri.getHost(), uri.getPort());
sipSession .setOutboundInterface(inetSocketAddr);
}
...
}
// This method simply pulls out the first interface in the list for the specified protocol
private SipURI getProtocolInterface(String transport, List outboundInterfaceList)
{
SipURI uri = null;
Iterator iterator = outboundInterfaceList.iterator();
while (iterator.hasNext())
{
SipURI tempUri = (SipURI)iterator.next();
if (tempUri.getTransportParam().equals(transport) == true)
{
uri = tempUri;
break;
}
}
return (uri);
}