企业服务总线(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();
}
}