花了三天终于在Websphere commerce 7,实现了和activeMQ的JMS异步通行。
业务流程如下:WCS作为前台商店,需要定时的往后台系统异步发送Order的数据。这里JMS Provider采用的是activeMQ(IBM Websphere MQ)买不起啊。其实和Websphere MQ的集成方式类似。
记录下整个实现方式:
1、在Websphere application server 管理控制台中配置:
点击进入http://localhost:9060/ibm/console/login.do
资源=》JMS
a.新建JMS提供程序
选择“JMS提供程序”,选择作用域(节点=localhost,服务器=server1),点击“新建”
名称 |
ActiveMQ |
外部初始上下文工厂 |
org.apache.activemq.jndi.ActiveMQWASInitialContextFactory |
外部提供程序URL |
tcp://localhost:61616(这是activeMQ默认的连接地址)。 |
b.然后,点击定制属性。新建
名称 |
java.naming.queue.jms.orderProvider |
值 |
jms/orderProvider |
类型 |
java.lang.String |
c.新建队列连接工厂
选择“队列连接工厂”,新建,JMS提供程序选择“ActiveMQ”。
名称 |
Queue Connection Factory |
JNDI名称 |
QueueConnectionFactory |
外部JNDI名称 |
QueueConnectionFactory |
d.新建队列
选择“队列连接工厂”,新建
名称 |
OrderProvider |
JNDI名称 |
jms/orderProvider |
外部JNDI名称 |
jms/orderProvider |
对应资源文件:cells/localhost/nodes/localhost/servers/server1/resources.xml
保存,重启AppServer.
2、进入IBM WebSphere Commerce Administrator Console管理控制台, 选择“站点”
a.点击“配置”=> “传送”,选择“Websphere MQ”,点击“配置”。
工厂 |
QueueConnectionFactory |
入站队列 |
jms/orderProvider |
错误队列 |
jms/orderProvider |
错误队列 |
jms/orderProvider |
这里我把inbound,outbound,errorbound都通过一个queue发送出去。也可以设置多个队列发送。
对应配置文件,在wc-server.xml中
<OutboundConnector default="true" enabled="true" id="3"
name="JMS" retries="3">
<JNDI JndiName="eis/JCAJMS" display="false"/>
<ConnectionSpec
ClassName="com.ibm.commerce.messaging.adapters.jcajms.JCAJMSConnectionSpec" default="true">
<EditableProperty Admin="factory" display="false"
editable="Yes" name="setConnectionFactory" value="QueueConnectionFactory"/>
<EditableProperty Admin="inQueue" display="false"
editable="Yes" name="setInboundQueue" value="jms/orderProvider"/>
<EditableProperty Admin="errorQueue" display="false"
editable="Yes" name="setErrorQueue" value="jms/orderProvider"/>
<EditableProperty Admin="outQueue" display="false"
editable="Yes" name="setOutboundQueue" value="jms/orderProvider"/>
</ConnectionSpec>
<InteractionSpec
ClassName="com.ibm.commerce.messaging.adapters.jcajms.JCAJMSInteractionSpec" default="true">
<EditableProperty Admin="timeOut" display="false"
editable="Yes" name="setTimeOut" value="60"/>
<EditableProperty Admin="mode" display="false"
editable="Yes" name="setMode" value="0"/>
<EditableProperty Admin="JMSExpiration"
display="false" editable="Yes"
name="setJMSExpiration" value="0"/>
</InteractionSpec>
</OutboundConnector>
b.配置消息类型
消息类型:可以定制,这里我选择已有功能“WebSphere Commerce XML 订单创建操作的出站消息”
消息严重性:对应优先级别,1-9
传输:Websphere MQ
设备格式:Websphere MQ 适配器 (XML)
错误队列:jms/orderProvider
工厂:QueueConnectionFactory
入站队列:jms/orderProvider
出站队列:jms/orderProvider
对应于表:PROFILE。
这里可以新建消息类型。在MSGTYPES中。定义需要的消息数据。
3、新建Command,名为ScheduledOrderProduceCmdImpl
package com.activemq.commerce.provider;
import com.ibm.commerce.command.CommandFactory;
import com.ibm.commerce.command.ControllerCommandImpl;
import com.ibm.commerce.datatype.TypedProperty;
import com.ibm.commerce.exception.ECException;
import com.ibm.commerce.messaging.commands.SendMsgCmd;
import com.ibm.commerce.ras.ECTrace;
import com.ibm.commerce.ras.ECTraceIdentifiers;
import com.ibm.websphere.command.CacheableCommand;
public class ScheduledOrderProduceCmdImpl extends ControllerCommandImpl
implements ScheduledOrderProduceCmd,CacheableCommand {
public final static String COPYRIGHT = com.ibm.commerce.copyright.IBMCopyright.SHORT_COPYRIGHT;
private static final String CLASS_NAME = "com.activemq.commerce.provider.ScheduledOrderProduceCmdImpl";
public void performExecute() throws ECException {
final String methodName = "performExecute()";
ECTrace.entry(ECTraceIdentifiers.COMPONENT_EXTERN, CLASS_NAME,
methodName);
super.performExecute();
SendMsgCmd senMsgCmdTask = (SendMsgCmd) CommandFactory
.createCommand(SendMsgCmd.class.getName(),this.getStoreId());
//对应的调用MSG的Command或者View
senMsgCmdTask.setMsgType("OrderCreateXMLFormat");
senMsgCmdTask.setCommandContext(getCommandContext());
senMsgCmdTask.setStoreID(this.getStoreId());
//设置优先级别,必须在最高和最低级别之间
senMsgCmdTask.setPriority(3);
TypedProperty tp = new TypedProperty();
//设置订单ID
tp.put("OrderRefNumber",11501);
//设置语言类型
tp.put("LANGUAGE_ID", getCommandContext().getLanguageId());
//从JSP组装输出内容
//viewName设置为null,默认从MSGTYPES表中取出对应view
senMsgCmdTask.compose(null,getCommandContext(),tp);
//直接输入字符来设置输出内容
//senMsgCmdTask.setContent(3,"-7","hello world");
senMsgCmdTask.sendImmediate();
senMsgCmdTask.execute();
ECTrace.exit(ECTraceIdentifiers.COMPONENT_EXTERN, CLASS_NAME,
methodName);
}
}
4、在struts-config.xml中配置view.
<forward className="com.ibm.commerce.struts.ECActionForward"
name="OrderCreateXMLFormatView/10001/-4" path="/OrderCreateXML.jsp">
<set-property property="direct" value="true"/>
<set-property property="resourceClassName" value="com.ibm.commerce.messaging.viewcommands.MessagingViewCommandImpl"/>
<set-property property="interfaceName" value="com.ibm.commerce.messaging.viewcommands.MessagingViewCommand"/>
<set-property property="properties" value="storeDir=no"/>
<set-property property="implClassName" value="com.ibm.commerce.messaging.viewcommands.MessagingViewCommandImpl"/>
</forward>
<action path="/OrderCreateXMLFormatView" type="com.ibm.commerce.struts.BaseAction">
<set-property property="https" value="0:0"/>
</action>
这里:
10001表示storeId,站点级别设置为0。
-4 表示设备格式。对应格式所代表的数字如下:
SOAP XML data transmitted via HTTP = -1
HTTP Browser = Reserved for IBM
Standard Device Format = -3
WebSphere MQ Adapter for XML = -4
WebSphere MQ Adapter for WCS (Legacy message) = -5
5、启动acitveMq,调用上面的command,即会已XML格式发送一个orderId=11501的订单信息,到activeMQ broker,consumer即可消费该消息。
分享到:
相关推荐
在集成Apache ActiveMQ到Tomcat应用服务器的过程中,我们需要配置多个组件来确保消息传递系统的正常...通过这种方式,ActiveMQ和Tomcat的集成允许我们在Web应用中无缝地利用消息传递能力,提高系统的可扩展性和解耦性。
将Spring Boot与ActiveMQ集成可以提供强大的消息处理能力,使应用能够解耦组件,提高可扩展性和容错性。 本文将详细讲解如何使用Spring Boot与内置的ActiveMQ进行集成,以及如何通过代码实现这一过程。 首先,我们...
当我们需要在Spring Boot应用中集成ActiveMQ时,我们可以实现高效、异步的通信机制,提高系统的可扩展性和解耦性。 首先,让我们详细探讨一下Spring Boot与ActiveMQ的集成过程: 1. **配置ActiveMQ** - 在`...
将ActiveMQ集成到Spring MVC应用中,可以提升系统的可扩展性和解耦性。 集成ActiveMQ到Spring MVC主要涉及以下几个关键知识点: 1. **JMS(Java Message Service)**:这是Java平台定义的一个标准接口,用于规范...
下面,我们将深入探讨Spring集成ActiveMQ的具体配置和实现细节。 ### 集成环境 首先,确定所使用的软件版本至关重要。本文中提到的Spring版本为2.5.6,ActiveMQ版本为5.4.2,这两个版本在当时(注意时间背景)是...
在本项目实例中,我们探讨的是一个基于Spring MVC、JPA、消息队列MQ以及缓存技术redis和ActiveMQ的集成应用。这个实例涵盖了多种关键的技术栈,旨在提供一个全面的解决方案,帮助开发者构建高效、可扩展的后端系统。...
spring集成activeMQ框架 配置方式(内含三种常见的消息接受监听方式的配置)JMS 配置测试等等
本案例将详细讲解如何将Spring与ActiveMQ整合,以提升系统的可扩展性和解耦性。 1. **Spring框架**:Spring是一个全方位的开发框架,提供了依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented ...
在IBM AIX操作系统上部署Websphere与ActiveMQ是一项复杂的工作,...这可能涉及到调整JVM参数、正确配置SSL、适配IBM JDK,以及对Websphere和ActiveMQ的详细理解。在整个过程中,对日志的监控和分析也是解决问题的关键。
7. **调试和测试**:在实际部署前,要进行充分的单元测试和集成测试,确保MQTT客户端在各种情况下都能正常工作。 通过以上步骤,开发者可以利用这些库文件在Qt环境中构建一个功能完善的MQTT客户端,实现与ActiveMQ...
在Spring MVC框架中集成ActiveMQ,可以提升系统的解耦性和可扩展性。以下是集成ActiveMQ到Spring MVC应用的三种常见方式,以及相关知识点的详细说明: 1. **基于XML配置的集成** 在Spring MVC项目中,我们可以通过...
【ActiveMQ与Tomcat整合教程】是关于如何在Apache Tomcat服务器中集成开源消息中间件ActiveMQ的详细步骤。这个教程适用于Tomcat 6.0.14版本,但请注意不同版本可能存在配置上的差异。 首先,为了使Tomcat能够识别和...
ActiveMQ是Apache软件基金会的一个开源项目,它实现了JMS规范,提供了跨语言和跨系统的应用集成消息通信。ActiveMQ不仅支持基本的JMS功能,还包含许多额外的特性,如支持多种协议(如AMQP、STOMP等)、事务处理、...
本教程将详细介绍如何在Spring Boot项目中集成ActiveMQ,实现消息接收的Demo。 首先,我们需要在Spring Boot项目中引入ActiveMQ的相关依赖。在`pom.xml`文件中添加以下Maven依赖: ```xml <groupId>org.spring...
在IT行业中,Spring Boot和ActiveMQ的整合是一个常见的任务,特别是在构建分布式系统和微服务架构时。Spring Boot以其简化配置和快速开发的特性受到广泛欢迎,而ActiveMQ作为一款开源的消息中间件,提供了消息队列...
ActiveMQ和Spring的集成是企业级Java应用中常见的消息中间件解决方案,用于实现解耦、异步处理和系统间的通信。在本示例中,我们将深入探讨如何将这两个组件结合在一起,以创建一个高效且可扩展的应用架构。 首先,...
5. **集成过程**:集成ActiveMQ和Spring通常涉及以下步骤: - 在Spring配置文件中添加ActiveMQ的JMS配置,包括连接工厂、目的地(队列或主题)等。 - 创建ActiveMQ服务器的配置,并启动服务器。 - 使用Maven的...
在这个项目中,我们将探讨如何将Spring Boot与Apache ActiveMQ、DataJPA和Ehcache进行集成,以构建一个功能丰富的应用程序。 首先,ActiveMQ是Apache出品的一款开源消息中间件,它遵循Java Message Service (JMS) ...