JMS与ESB三层架构

企业服务总线(ESB)在面向服务的体系结构(SOA)中实现相互交互的软件应用程序之间的通信系统。它实现了如图所示的软件体系结构。当它实现分布式计算体系结构时,它实现了更一般的客户机-服务器模型的特殊变型,其中,一般而言,使用ESB的任何应用程序都可以依次充当服务器或客户端。ESB在应用程序之间的高级协议通信方面促进灵活性和灵活性。高级协议通信的主要目标是异构和复杂服务或应用场景的企业应用集成(EAI)(从网络层来看)。

这里写图片描述

案例分析:

这里写图片描述

JMS使用activemq中间件消息队列

public class JMSToolsOperate {  
    private ConnectionFactory factory=new ActiveMQConnectionFactory("tcp://localhost:61616");
    private Connection connection;
    private Session session;

    //将信息发送到队列中
    public void sendMsg(String message, String queueName) {
        try {
            connection = factory.createConnection();
            connection.start();
            //创建会话
            session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            //目的地:队列模式
            Destination queue = session.createQueue(queueName);
            //消息
            Message msg = session.createTextMessage(message);
            MessageProducer producer = session.createProducer(queue);
            producer.send(msg);
        } catch (JMSException e) {
            e.printStackTrace();
        } finally {
            try {
                session.close();
                connection.close();
            } catch (JMSException e) {
                e.printStackTrace();
            }
        }
    }

    //从队列中接收消息
    public String receiveMsg(String queueName) {
        String message = null;
        try {
            connection = factory.createConnection();
            connection.start();
            session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            //接收端组件
            Destination queue = session.createQueue(queueName);
            MessageConsumer consumer = session.createConsumer(queue);
            message = ((TextMessage) consumer.receive()).getText();
            session.close();
            connection.close();
        } catch (JMSException e) {
            e.printStackTrace();
        } finally {
            try {
                session.close();
                connection.close();
            } catch (JMSException e) {
                e.printStackTrace();
            }
        }
        return message;
    }
}

开启Activemq测试:

public static void main(String[] args){
          System.out.println("CORE........");
          JMSToolsOperate tools=new JMSToolsOperate();
          tools.sendMsg("hello", "E2C");
          while(true){
                 String message=tools.receiveMsg("E2C");
                 System.out.println("CORE接收到数据E2C:"+message );
                 String newMsg=message;
                 tools.sendMsg(newMsg, "E2C");
                 System.out.println("CORE发送到C2E数据:"+newMsg); 
          }  
    }

三层架构:

Server——-Socket———–webapp

webapp:

public class MyServlet extends HttpServlet {
       private String url="127.0.0.1";
       private int port=8888;
       public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
                    doPost(request,response);
       }
       public void doPost(HttpServletRequest request, HttpServletResponse response)
                  throws ServletException, IOException {
           response.setContentType("text/html");
           response.setCharacterEncoding("GBK");
           request.setCharacterEncoding("GBK");
           //获取请求信息
           String value=request.getParameter("inputValue");
           //建立Teller端socket
           Socket s=new Socket(url,port);
           PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
           BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
           //输出获取的信息socket
           pw.println(value);
           System.out.println("TELLER发送到ESB: "+value);
           String result=br.readLine();
           System.out.println("TELLER接收到ESB:" +result);
           //转到view页面
           request.getRequestDispatcher("view.jsp?result="+result).forward(request, response);

       }
}

Service

public class ESBListener implements Runnable {
    private JMSToolsOperate tools=new JMSToolsOperate();
    private Socket s;   
    public ESBListener(Socket s){
        this.s=s;
    }
    public void run() {
        try {
            BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
            PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
            //server接收
            String reMsg=br.readLine();
            System.out.println("ESB接收TELLER的数据:"+reMsg);
            //将server接收的消息发送到队列
            tools.sendMsg(reMsg, "E2C");
            System.out.println("ESB到E2C数据:"+reMsg);
            //从队列接收的消息
            String result=tools.receiveMsg("C2E");
            System.out.println("ESB接收C2E传回数据:"+result);
            //接收的消息输出
            pw.println(result);
            System.out.println("ESB返回给TELLER数据: "+result);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}
public class ESBServer {
    private ServerSocket ss=null;
    private int port=8888;
    public ESBServer() throws IOException{
        ss=new ServerSocket(port);
        System.out.println("ESB Server.......");
    }
    //服务端接收->mq->从mq读取->服务器发送
    public void Communite(){
        try {
            while(true){
                Socket s=ss.accept();
                System.out.println("ESB");
                new Thread(new ESBListener(s)).start();
            }       
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //开启服务端进行监听
    public static void main(String[] args) throws IOException{
        new ESBServer().Communite();
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值