activemq与webservice整合

 在多个系统中可能考虑到远程访问等的,采用WebService方式和远程系统的JMS消息系统交互。本文采用ActiveMQ和JAXWS实现。客户端通过webservice将消息发送给服务端的消息队列。

Java代码   收藏代码
  1. package easyway.app.activemq.ws;  
  2.   
  3. import javax.jws.WebMethod;  
  4. import javax.jws.WebParam;  
  5. import javax.jws.WebService;  
  6. /** 
  7.  * 服务端接口 
  8.  * @author longgangbai 
  9.  * 
  10.  */  
  11. @WebService  
  12. public interface HelloWorld {  
  13.     /** 
  14.      * 启动相关的服务方法 
  15.      * @param name 
  16.      * @return 
  17.      */  
  18.     @WebMethod  
  19.     String sayHi(@WebParam(name = "name") String name);  
  20. }  

 

 

 

 

Java代码   收藏代码
  1. package easyway.app.activemq.ws;  
  2.   
  3. import javax.jws.WebService;  
  4.   
  5. /** 
  6.  * 服务端实现 
  7.  * @author longgangbai 
  8.  * 
  9.  */  
  10. @WebService  
  11. public class HelloWorldImpl implements HelloWorld {  
  12.     /* 
  13.      * (non-Javadoc) 
  14.      * @see test.IHello#sayHi(java.lang.String) 
  15.      */  
  16.     public String sayHi(String name) {  
  17.         return "Hello " + name;  
  18.     }  
  19. }  

 

 

 

服务端通过WebService发布JMS消息的信息:

Java代码   收藏代码
  1. package easyway.app.activemq.ws.server;  
  2.   
  3. import javax.xml.ws.Endpoint;  
  4.   
  5. import org.apache.activemq.ActiveMQConnectionFactory;  
  6. import org.apache.activemq.broker.BrokerService;  
  7. import easyway.app.activemq.ws.HelloWorldImpl;  
  8.   
  9. /** 
  10.  * 通过WebService提供本地的JMS服务 
  11.  * @author longgangbai 
  12.  * 
  13.  */  
  14. public class ActiveMQWServer {  
  15.       
  16.     //设置JMS的URI的格式:jms:queue or topic:destination  
  17.     private static final String JMS_ENDPOINT_URI = "jms:queue:jaxws.jmstransport.queue?timeToLive=1000"  
  18.             + "&jndiConnectionFactoryName=ConnectionFactory"  
  19.             + "&jndiInitialContextFactory"  
  20.             + "=org.apache.activemq.jndi.ActiveMQInitialContextFactory";  
  21.   
  22.     private ActiveMQWServer() {  
  23.     }  
  24.   
  25.     public static void main(String args[]) throws Exception {  
  26.         ActiveMQWServer  server=new ActiveMQWServer();  
  27.         //初始化Broker的方法  
  28.         server.initBrokerService();  
  29.         //启动JAXWS相关的 服务  
  30.         server.launchJaxwsApi();  
  31.   
  32.         System.out.println("Server ready... Press any key to exit");  
  33.         System.in.read();  
  34.         System.out.println("Server exiting");  
  35.         System.exit(0);  
  36.     }  
  37.     /** 
  38.      * 启动ActiveMQ的Broker 
  39.      * @throws Exception 
  40.      */  
  41.     public void initBrokerService() throws Exception{  
  42.         BrokerService  brokerService=new BrokerService();  
  43.         brokerService.addConnector( ActiveMQConnectionFactory.DEFAULT_BROKER_BIND_URL);  
  44.         brokerService.setDataDirectory("target/activemq-data");  
  45.         brokerService.start();  
  46.     }  
  47.   
  48.   
  49.     /** 
  50.      * 发布WebService服务 
  51.      * 
  52.      */  
  53.     private  void launchJaxwsApi() {  
  54.         Endpoint.publish(JMS_ENDPOINT_URI, new HelloWorldImpl());  
  55.     }  
  56. }  

 

 

 

客户端通过webservice发送消息到服务端的消息队列:

Java代码   收藏代码
  1. package easyway.app.activemq.ws.client;  
  2. import javax.xml.namespace.QName;  
  3. import javax.xml.ws.Service;  
  4. import org.apache.cxf.transport.jms.spec.JMSSpecConstants;  
  5. import easyway.app.activemq.ws.HelloWorld;  
  6. /** 
  7.  * 客户端通过WebService向服务端队列中发送消息 
  8.  * @author longgangbai 
  9.  * 
  10.  */  
  11. public final class ActiveMQWSClient {  
  12.     //WebService请求的url的路径  
  13.     private static final String JMS_ENDPOINT_URI = "jms:queue:jaxws.jmstransport.queue?timeToLive=1000"  
  14.             + "&jndiConnectionFactoryName=ConnectionFactory"  
  15.             + "&jndiInitialContextFactory"  
  16.             + "=org.apache.activemq.jndi.ActiveMQInitialContextFactory";  
  17.       
  18.     private static final QName SERVICE_QNAME =  
  19.         new QName("http://ws.activemq.app.easyway/""HelloWorldImplService");  
  20.     private static final QName PORT_QNAME =  
  21.         new QName("http://ws.activemq.app.easyway/""HelloWorldPort");  
  22.   
  23.     private ActiveMQWSClient() {  
  24.     }  
  25.     /** 
  26.      * 客户端调用WS服务 
  27.      * @return 
  28.      */  
  29.     private static HelloWorld createClientJaxWs() {  
  30.         //创建相关的 服务  
  31.         Service service = Service.create(SERVICE_QNAME);  
  32.         // Add a port to the Service  
  33.         service.addPort(PORT_QNAME, JMSSpecConstants.SOAP_JMS_SPECIFICATION_TRANSPORTID, JMS_ENDPOINT_URI);  
  34.         return service.getPort(HelloWorld.class);  
  35.     }  
  36.       
  37.     public static void main(String[] args) throws Exception {  
  38.           
  39.         HelloWorld client = createClientJaxWs();  
  40.   
  41.         String reply = client.sayHi("HI");  
  42.         System.out.println(reply);  
  43.     }  
  44.   
  45.   
  46. }  

 

你可能感兴趣的:(activemq与webservice整合)