JMS
来源:互联网 发布:淘宝修改昵称 编辑:程序博客网 时间:2024/04/29 02:31
一、Weblogic中配置JMS
JMS服务器的配置:服务--消息传送--JMS服务器--新建--(持久性存储:[新建存储--类型:文件存储--确定] 这些步骤可选)--下一步--目标: AdminServer--完成 (PocJMSServer)
JMS模块配置:新建--下一步--目标:AdminServer--下一步--完成(SystemModule-0)
连接工厂配置:点击SystemModule-0--新建--下一步--完成
队列配置:点击SystemModule-0--新建--下一步--新建子部署--目标:PocJMSServer--完成
二、JMS发送端方法(主要参考网上资料)
publicvoid sendMessages(String data, String sqdzj, String jgdm) {
InitialContext ctx =null;
QueueConnectionFactoryqcf = null;
QueueConnection qc =null;
QueueSession qsess =null;
Queue q = null;
QueueSender qsndr =null;
TextMessage message =null;
String QCF_NAME ="VisaConnectionFaction";//连接工厂的jndi名称
String QUEUE_NAME = "InOutQueueData";//队列jndi名称
Hashtable properties =new Hashtable();
properties.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
properties.put(Context.PROVIDER_URL, "t3://192.168.0.11:7001");
properties.put(Context.SECURITY_PRINCIPAL, "weblogic");//域的用户名
properties.put(Context.SECURITY_CREDENTIALS, "12345678");//域的登录密码
try {
ctx = newInitialContext(properties);
// createQueueConnectionFactory
qcf =(QueueConnectionFactory)ctx.lookup(QCF_NAME);
// createQueueConnection
qc =qcf.createQueueConnection();
// createQueueSession
qsess =qc.createQueueSession(false, 0);
// lookupQueue
q =(Queue)ctx.lookup(QUEUE_NAME);
// createQueueSender
qsndr =qsess.createSender(q);
// createTextMessage
message =qsess.createTextMessage();
// setmessage text in TextMessage
message.setText(data);//消息内容
if("14".equals(jgdm.substring(0, 2))) {
message.setStringProperty("orgcode", "140000");//设置消息属性
message.setStringProperty("sqdzj", sqdzj);
} else if("09".equals(jgdm.substring(0, 2))) {
message.setStringProperty("orgcode", "090000");
message.setStringProperty("sqdzj", sqdzj);
}else{
}
qsndr.send(message);
message =null;
qsndr.close();
qsndr =null;
q = null;
qsess.close();
qsess =null;
qc.close();
qc = null;
qcf =null;
ctx =null;
System.out.println("Cleaned up and done.SQDATA");
} catch (Exception ne) {
ne.printStackTrace(System.err);
System.exit(0);
}
// return s;
}
三、接收消息
publicclass QueueReceiveSQData implements MessageListener {
public final static StringJNDI_FACTORY="weblogic.jndi.WLInitialContextFactory";//与发送端应用配置一致
public final static StringPROVIDER_URL="t3://192.168.0.11:7001";//发送端URL
public final static StringJMS_FACTORY="VisaConnectionFaction";//与发送端应用配置一致
public final static String QUEUEIO="InOutQueueData";//与发送端应用配置一致
private static QueueConnectionFactory qconFactory;
private static QueueConnection qcon;
private static QueueSession qsession;
private static QueueReceiver qreceiver;
private static Queue queue;
/**
* 入口方法
*/
public static void receiveMsg() throws Exception {
InitialContext ic = getInitialContext();
QueueReceiveSQData q = newQueueReceiveSQData();
q.inits(ic, QUEUEIO);
// // 当收到"quit"信息后,停止接收
// synchronized(q) {
// while (true) {
// try {
// q.wait();
// } catch (InterruptedException ie){
//
// }
// }
// }
// qr.close();
}
/**
* 1、
* 通过JNDI查找ConnectionFactory。
* 通过JNDI查找一个或多个Destination。
*/
private static InitialContext getInitialContext() throwsNamingException {
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,JNDI_FACTORY);
env.put(Context.PROVIDER_URL,PROVIDER_URL);
return new InitialContext(env);
}
public void inits(Context ctx, String queueName)
throws NamingException, JMSException{
qconFactory =(QueueConnectionFactory) ctx.lookup(JMS_FACTORY);
qcon =qconFactory.createQueueConnection();
qsession =qcon.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
queue = (Queue)ctx.lookup(queueName);
qreceiver =qsession.createReceiver(queue);
qreceiver.setMessageListener(newQueueReceiveSQData());
qcon.start();
System.out.println("SQDATA");
}
public void onMessage(Message msg){
try {
StringmsgText;
if ((msg instanceofjavax.jms.TextMessage)) {
System.out.println("DATA:"+ ((TextMessage)msg).getText());
System.out.println("orgcode:"+(msg.getStringProperty("orgcode")));
msgText = ((TextMessage)msg).getText();
}
// if (msg instanceof TextMessage) {
// msgText =((TextMessage)msg).getText();
// } else {
// msgText = msg.toString();
// }
// System.out.println("Message Received: "+ msgText );
// // 当收到"quit"信息后,停止接收
// if (msgText.equalsIgnoreCase("quit")) {
// synchronized(this) {
// quit =true;
// this.notifyAll();
// }
// }
} catch (JMSException jmse) {
jmse.printStackTrace();
}
}
/**
* 4、消息对象关闭
*/
public static void close()throws JMSException {
if(qreceiver!=null){
qreceiver.close();
qsession.close();
qcon.close();
}
}
四、监听类
publicclass ContextListener implements ServletContextListener {
public ContextListener() {
super();
}
public void contextInitialized(ServletContextEventservletContextEvent) {
System.out.println("====接收JMS信息程序启动=====");
try {
QueueReceive.receiveMsg();
QueueReceiveSQ.receiveMsg();
QueueReceiveSQData.receiveMsg();
} catch (Exception e) {
e.printStackTrace();
}
}
public void contextDestroyed(ServletContextEventservletContextEvent) {
System.out.println("====接收JMS信息程序关闭=====");
try {
QueueReceive.close();
QueueReceiveSQ.close();
QueueReceiveSQData.close();
} catch (JMSException e) {
}
}
}
五、web.xml文件配置监听
<listener>
<listener-class>com.mgear.services.datamethod.ContextListener</listener-class>
</listener>
六、部署项目后,可以自动监听到队列的消息。
- JMS
- JMS
- JMS
- JMS
- JMS
- JMS
- JMS
- JMS
- JMS
- JMS
- JMS
- JMS
- jms
- JMS
- JMS
- JMS
- JMS
- JMS
- 怎样修改SWF中的链接?
- oracle timestamp 时间戳增加一天
- 地铁换乘(华为机试样题)
- C#的装箱与拆箱
- 34.打印十字图
- JMS
- 第三周作业
- 关于Java中的继承与访问修饰符的一些总结
- 内存泄漏检查工具valgrind的安装与使用
- oracle 高级分组 GROUPING_ID
- uva1232 - SKYLINE 线段树
- Android事件分发机制完全解析,带你从源码的角度彻底理解(全)
- PHP中autoload函数的使用
- C#中4个常用的集合