基于内容的路由器

基于内容的路由器首先检查消息的内容,并根据消息中包含的数据把消息路由到不同的通道上。可以根据许多标准来完成路由,如是否存在某些字段、是否有指定的字段值等。实现基于内容的路由器时,由于可能会频繁维护路由器,所以要特别注意路由功能应当易于维护。在更复杂的集成环境中,基于内容的路由器可能会以可配置规则引擎的形式出现,可以根据一组可配置的规则来计算目标通道。

背景:
假设一个公司销售配件(A)和零部件(B),并有两个库存系统,我们需要把新的订单路由到正确的库存系统中以便处理。

代码实现:


新订单
package com.foshanshop.ejb3.app;

import javax.jms.*;
import javax.jms.Queue;
import java.util.*;
import javax.naming.*;

public class QueueSender {

public static void main(String []args)
{
QueueConnection conn=null;
QueueSession session=null;
try
{
Properties props=new Properties();
props.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
props.setProperty(Context.PROVIDER_URL, "localhost:1099");
props.setProperty(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
InitialContext ctx = new InitialContext(props);

QueueConnectionFactory factory=(QueueConnectionFactory)ctx.lookup("QueueConnectionFactory");

conn=factory.createQueueConnection();

session=conn.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);

Destination destination=(Queue)ctx.lookup("queue/FQueue");

MessageProducer producer=session.createProducer(destination);

TextMessage msg=session.createTextMessage("w product");

producer.send(msg);
}
catch(Exception e)
{
System.out.println("queueSender main has a problem"+":"+e.toString());
}
}
}

路由器:

package com.foshanshop.ejb3.impl;

import java.util.Properties;
import javax.jms.*;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.ejb.*;
@MessageDriven(activationConfig={@ActivationConfigProperty(propertyName="destinationType",propertyValue="javax.jms.Queue"),
@ActivationConfigProperty(propertyName="destination",propertyValue="queue/FQueue"),@ActivationConfigProperty(propertyName="acknowledgeMode",propertyValue="Auto-acknowledge")})

public class FQueueBean implements MessageListener {

public void onMessage(Message msg) {
// TODO Auto-generated method stub
QueueConnection conn=null;
QueueSession session=null;
try
{
Properties props=new Properties();
props.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
props.setProperty(Context.PROVIDER_URL, "localhost:1099");
props.setProperty(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
InitialContext ctx = new InitialContext(props);

QueueConnectionFactory factory=(QueueConnectionFactory)ctx.lookup("QueueConnectionFactory");

conn=factory.createQueueConnection();

session=conn.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);

Destination destinationA=(Queue)ctx.lookup("queue/FQueueA");
Destination destinationB=(Queue)ctx.lookup("queue/FQueueB");

if(msg instanceof TextMessage)
{
TextMessage tmsg=(TextMessage)msg;
String text=tmsg.getText();
if(text.startsWith("w"))
{
MessageProducer producer=session.createProducer(destinationA);
producer.send(msg);
}
else if(text.startsWith("s"))
{
MessageProducer producer=session.createProducer(destinationB);
producer.send(msg);
}
}
}
catch(Exception e)
{
System.out.println("FQueueBean has a problem"+":"+e.toString());
}
}

}

A库存系统:

package com.foshanshop.ejb3.impl;

import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;

@MessageDriven(activationConfig={@ActivationConfigProperty(propertyName="destinationType",propertyValue="javax.jms.Queue"),
@ActivationConfigProperty(propertyName="destination",propertyValue="queue/FQueueA"),@ActivationConfigProperty(propertyName="acknowledgeMode",propertyValue="Auto-acknowledge")})
public class FQueueABean implements MessageListener {

public void onMessage(Message msg) {
// TODO Auto-generated method stub
try
{
if(msg instanceof TextMessage)
{
TextMessage tmsg=(TextMessage)msg;
System.out.println("FQueueABean:"+tmsg.getText());
}
}
catch(Exception e)
{
System.out.println("there is a problem in FQueueA"+":"+e.toString());
}
}

}

B库存系统:

package com.foshanshop.ejb3.impl;

import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;

@MessageDriven(activationConfig={@ActivationConfigProperty(propertyName="destinationType",propertyValue="javax.jms.Queue"),
@ActivationConfigProperty(propertyName="destination",propertyValue="queue/FQueueB"),@ActivationConfigProperty(propertyName="acknowledgeMode",propertyValue="Auto-acknowledge")})
public class FQueueBBean implements MessageListener {

public void onMessage(Message msg) {
// TODO Auto-generated method stub

try
{
if(msg instanceof TextMessage)
{
TextMessage tmsg=(TextMessage)msg;
System.out.println("FQueueBBean:"+tmsg.getText());
}
}
catch(Exception e)
{
System.out.println("there is a problem in FQueueA"+":"+e.toString());
}
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值