实现异步互操作性及XBikes部署指南
立即解锁
发布时间: 2025-08-17 02:37:52 阅读量: 1 订阅数: 4 


Microsoft.NET与J2EE互操作性指南
### 实现异步互操作性及 XBikes 部署指南
在不同技术栈之间实现异步互操作性是一个复杂但重要的任务,尤其是在 .NET Framework 和 Java 环境之间。同时,XBikes 应用在 J2EE 环境中的部署也有多种方式。本文将详细介绍这些内容。
#### 一、使用 MSMQ - MQSeries 桥实现互操作性
##### 1. 消息队列配置
要通过 MSMQ - MQSeries 桥实现互操作性,需要为每个消息发送方向创建两个队列,分别用于接收消息的本地队列和发送消息的远程队列,并且要正确配置桥。具体步骤如下:
1. **定义 MSMQ 队列**:在运行桥的计算机上添加本地队列,在外部计算机上添加远程队列。
2. **添加 MQI 通道**:使用 MSMQ - MQSeries 桥管理器添加指向运行 WebSphere MQ 的计算机的 MQI 通道,这将创建四个消息管道(两个事务性和两个非事务性),用于在两个排队系统之间路由消息。
3. **导出和导入定义**:创建通道后,导出客户端和服务器定义,将这些文件复制到 WebSphere MQ 计算机,然后使用 runmqsc 命令导入,该命令可配置传输队列并保持桥两端的通道同步。
4. **创建 WebSphere MQ 队列**:在 WebSphere MQ 中创建本地和远程队列,配置远程队列通过桥指向 MSMQ 队列,即配置远程队列管理器名称和传输队列名称指向导入创建的对象。
5. **复制并配置文件**:将 WebSphere MQ 客户端通道表文件从运行 WebSphere MQ 的计算机复制到 MSMQ 计算机,并配置 MQCHLLIB 和 MQCHLTAB 环境变量指向该文件。
以下是逻辑表示图:
```mermaid
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A(MSMQ 3.0):::process -->|Message flow from MSMQ to WebSphereMQ| B(MSMQ - MQSeries Bridge):::process
B -->|Message flow from MSMQ to WebSphereMQ| C(WebSphere MQ 5.3):::process
C -->|Message flow from WebSphereMQ to MSMQ| B
B -->|Message flow from WebSphereMQ to MSMQ| A
D(SampleQ1 - receives from .NET to Java):::process --> B
E(SampleQ2 - receives from Java to .NET):::process --> B
B --> F(SampleQ1 - sends from .NET to Java):::process
B --> G(SampleQ2 - sends from Java to .NET):::process
```
##### 2. 数据格式选择
在使用 MSMQ - MQSeries 桥在队列上发送消息时,必须确保接收端能够处理消息数据。在 J2EE 和 .NET Framework 之间发送复杂数据的唯一可行方法是将数据序列化为 XML 格式的字符串。WebSphere MQ 支持发送 TextMessages,可将包含 XML 数据的字符串加载到消息体中,MSMQ 也允许发送包含 XML 格式字符串的简单消息。
##### 3. 创建消息消费者
消息消费者是用于从队列中轮询和读取消息并将其放入资源外观的应用程序。由于使用了桥,处理的是 XML 格式的字符串,因此在使用数据调用资源外观上的方法之前,需要从 XML 字符串中重建数据。
- **.NET Framework 消息消费者**:从 MSMQ 队列读取消息,读取消息内容后需要重建数据。以下是示例代码:
```csharp
MessageQueue q = new MessageQueue(_queueName);
q.Formatter = new XmlMessageFormatter( new Type[] {typeof(String)} );
Message order = q.Receive(0);
string xml = (string) order.Body();
StringReader sr = new StringReader(xml);
OrderData ds = new OrderData();
// Load result string back into an OrderData-typed DataSet
ds.ReadXml(sr);
```
- **J2EE 消息消费者**:从 WebSphere MQ 读取消息,可使用 MQI Java 类或 JMS 构建。读取消息后,需要从 XML 字符串中重建 Java 数据。以下是示例代码:
```java
String connectionName = "XBikesQFC";
InitialContext ic = new InitialContext();
QueueConnectionFactory factory = (QueueConnectionFactory) ic.lookup(connectionName);
QueueConnection connection = factory.createQueueConnection();
QueueSession session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = (Queue) ic.lookup(queueName);
QueueReceiver receiver = session.createReceiver(queue);
connection.start();
TextMessage message = (TextMessage) receiver.receive();
String orderXML = message.getText();
OrderData order = OrderConverter.stringtoOrderData(orderXML);
DalServiceFacade facade = getFacadeHome().create();
return facade.saveOrder(order);
```
##### 4. 创建互操作性适配器
建议创建异步互操作性适配器以提供对异步通信通道的访问,该适配器将消息数据序列化为 XML 格式的字符串。
- **.NET Framework 异步互操作性适配器**:.NET Framework 应用程序向 MSMQ 发送消息,可使用 .NET Framework 类实现。如果使用数据集,可使用 GetXml() 方法提取 XML 并将其放入 MSMQ 消息队列。示例代码如下:
```csharp
string xml = order.GetXml();
MessageQueue q = new MessageQueue(_queueName);
q.Send(xml);
```
- **J2EE 异步互操作性适配器**:J2EE 应用程序向 WebSphere MQ 发送消息,可使用 JMS 类(或 MQI)发送消息。由于最终消息目的地是 MSMQ,必须创建字符串消息而不是写入对象。示例代码如下:
```java
InitialContext ic = new InitialContext();
QueueConnectionFactory factory = (QueueConnectionFactory) ic.lookup("XBikesQCF");
QueueConnection connection = factory.createQueueConnection();
QueueSession session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = (Queue) ic.lookup("XBikesQ");
QueueSender sender = session.createSender(queue);
sender.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
sender.setPriority(4);
sender.setTimeToLive(0);
connection.start();
// Use a text message
TextMessage message = session.createTextMessage();
// Convert the order to a string
String sorder = OrderConverter.orderListDataToString(orderObject);
message.s
```
0
0
复制全文
相关推荐









