42.4.3. 设置 JMS 属性

摘要

在消费者端点中使用请求上下文,您可以设置多个 JMS 邮件标头属性和消费者端点的超时值。这些属性对单个调用有效。每次在服务代理中调用操作时,您必须重置它们。

请注意,您无法在服务中设置标头属性。

JMS 标头属性

表 42.4 “设定的 JMS 标头属性” 列出 JMS 标头中的属性,它们可通过使用者端点的请求上下文来设置。

表 42.4. 设定的 JMS 标头属性

属性名称属性类型setter Method

关联 ID

字符串

setJMSCorralationID()

交付模式

int

setJMSDeliveryMode()

优先级

int

setJMSPriority()

实时到实时

long

setTimeToLive()

要设置这些属性,请执行以下操作:

  1. 创建 org.apache.cxf.transports.jms.context.JMSMessageHeadersType 对象。
  2. 使用 表 42.4 “设定的 JMS 标头属性” 中描述的适当的 setter 方法填充您要设置的值。
  3. 使用 org.apache.cxf.transports.jms.JMSConstants.JMS_CLIENT_REQUEST_HEADERS 作为第一个参数,将值设置为请求上下文,将新的 JMSMessageHeadersType 对象作为第二个参数。

可选的 JMS 标头属性

您还可以将可选属性设置为 JMS 标头。可选的 JMS 标头属性存储在用于设置其他 JMS 标头属性的 JMSMessageHeadersType 对象中。它们存储为包含 org.apache.cxf.transports.jms.context.JMSPropertyType 对象的 List 对象。要在 JMS 标头中添加可选属性,请执行以下操作:

  1. 创建 JMSPropertyType 对象。
  2. 使用 setName() 设置属性的 name 字段。
  3. 使用 setValue() 设置属性的值字段。
  4. 使用 JMSMessageHeadersType.getProperty().add(JMSPropertyType),将 属性添加到 JMS 邮件标头中。
  5. 重复此过程,直到所有属性都已添加到消息标头中。

客户端接收超时

除了 JMS 标头属性外,您还可以设置消费者端点在超时前等待响应的时间。您可以通过使用 org.apache.cxf.transports.jms.JMSConstants.JMS_CLIENT_RECEIVE_TIMEOUT 调用请求上下文的 put() 方法来设置这个值,以毫秒表示您希望使用者作为第二个参数等待的时间。

示例

例 42.15 “使用请求上下文设置 JMS 属性” 显示使用请求上下文设置某些 JMS 属性的代码。

例 42.15. 使用请求上下文设置 JMS 属性

import org.apache.cxf.transports.jms.context.*;
 // Proxy greeter initialized previously
InvocationHandler handler = Proxy.getInvocationHandler(greeter);

BindingProvider bp= null;
if (handler instanceof BindingProvider)
{
  bp = (BindingProvider)handler;
  Map<String, Object> requestContext = bp.getRequestContext();

  JMSMessageHeadersType requestHdr = new JMSMessageHeadersType();
  requestHdr.setJMSCorrelationID("WithBob");
  requestHdr.setJMSExpiration(3600000L);


  JMSPropertyType prop = new JMSPropertyType;
  prop.setName("MyProperty");
  prop.setValue("Bluebird");
  requestHdr.getProperty().add(prop);

  requestContext.put(JMSConstants.CLIENT_REQUEST_HEADERS, requestHdr);

  requestContext.put(JMSConstants.CLIENT_RECEIVE_TIMEOUT, new Long(1000));
}

例 42.15 “使用请求上下文设置 JMS 属性” 中的代码执行以下操作:

获取您要更改的 JMS 属性的 InvocationHandler

检查,以查看 InvocationHandler 是否为 BindingProvider

将返回的 InvocationHandler 对象转换为 BindingProvider 对象,以检索请求上下文。

获取请求上下文。

创建一个 JMSMessageHeadersType 对象来容纳新的消息标头值。

设置正确的 ID。

将 Expiration 属性设为 60 分钟。

创建新的 JMSPropertyType 对象。

设置可选属性的值。

在消息标题中添加可选属性。

将 JMS 消息标头值设置为请求上下文。

将客户端接收超时属性设置为 1 秒。