米乐体育(中国)科技有限公司官网
  • 米乐体育(中国)科技有限公司官网
  • 网站首页
  • 关于我们
    企业简介
    企业文化
    企业理念
  • 产品展示
    产品一类
    产品二类
    产品三类
    产品四类
  • 荣誉资质
  • 新闻资讯
  • 成功案例
  • 联系我们
  • 首页幻灯
主页 > 荣誉资质 >

一文解说什么是微服务?微服务之间是如何独立通讯的?

发表时间:2023年02月01日浏览量:

本文摘要:什么是微服务微服务架构是一个漫衍式系统,根据业务举行划分成为差别的服务单元,解决单体系统性能等不足。微服务是一种架构气势派头,一个大型软件应用由多个服务单元组成。 系统中的服务单元可以单独部署,各个服务单元之间是松耦合的。微服务观点起源:Microservices微服务之间是如何独立通讯的同步REST HTTP 协议REST 请求在微服务中是最为常用的一种通讯方式,它依赖于 HTTPHTTPS 协议。

米乐体育

什么是微服务微服务架构是一个漫衍式系统,根据业务举行划分成为差别的服务单元,解决单体系统性能等不足。微服务是一种架构气势派头,一个大型软件应用由多个服务单元组成。

米乐体育

系统中的服务单元可以单独部署,各个服务单元之间是松耦合的。微服务观点起源:Microservices微服务之间是如何独立通讯的同步REST HTTP 协议REST 请求在微服务中是最为常用的一种通讯方式,它依赖于 HTTPHTTPS 协议。RESTFUL 的特点是:每一个 URI 代表 1 种资源客户端使用 GET、POST、PUT、DELETE 4 个表现操作方式的动词对服务端资源举行操作:GET 用来获取资源,POST 用来新建资源(也可以用于更新资源),PUT 用来更新资源,DELETE 用来删除资源通过操作资源的体现形式来操作资源资源的体现形式是 XML 或者 HTML客户端与服务端之间的交互在请求之间是无状态的,从客户端到服务端的每个请求都必须包罗明白请求所必须的信息举个例子,有一个服务方提供了如下接口:@RestController@RequestMapping("/communication")public class RestControllerDemo { @GetMapping("/hello") public String s() { return "hello"; }}另外一个服务需要去挪用该接口,挪用方只需要凭据 API 文档发送请求即可获取返回效果。@RestController@RequestMapping("/demo")public class RestDemo{ @Autowired RestTemplate restTemplate; @GetMapping("/hello2") public String s2() { String forObject = restTemplate.getForObject("http://localhost:9013/communication/hello", String.class); return forObject; }}通过这样的方式可以实现服务之间的通讯。

米乐体育

RPC TCP 协议RPC(Remote Procedure Call)远程历程挪用,简朴的明白是一个节点请求另一个节点提供的服务。它的事情流程是这样的:执行客户端挪用语句,传送参数挪用当地系统发送网络消息消息传送到远程主机服务器获得消息并取得参数凭据挪用请求以及参数执行远程历程(服务)执行历程完毕,将效果返回服务器句柄服务器句柄返回效果,挪用远程主机的系统网络服务发送效果消息传回当地主机客户端句柄由当地主机的网络服务吸收消息客户端吸收到挪用语句返回的效果数据举个例子。首先需要一个服务端:import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.lang.reflect.Method;import java.net.InetSocketAddress;import java.net.ServerSocket;import java.net.Socket;import java.util.concurrent.ConcurrentHashMap;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** * RPC 服务端用来注册远程方法的接口和实现类 */public class RPCServer { private static ExecutorService executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); private static final ConcurrentHashMap<String, Class> serviceRegister = new ConcurrentHashMap<>(); /** * 注册方法 * @param service * @param impl */ public void register(Class service, Class impl) { serviceRegister.put(service.getSimpleName(), impl); } /** * 启动方法 * @param port */ public void start(int port) { ServerSocket socket = null; try { socket = new ServerSocket(); socket.bind(new InetSocketAddress(port)); System.out.println("服务启动"); System.out.println(serviceRegister); while (true) { executor.execute(new Task(socket.accept())); } } catch (Exception e) { e.printStackTrace(); } finally { if (socket != null) { try { socket.close(); } catch (IOException e) { e.printStackTrace(); } } } } private static class Task implements Runnable { Socket client = null; public Task(Socket client) { this.client = client; } @Override public void run() { ObjectInputStream input = null; ObjectOutputStream output = null; try { input = new ObjectInputStream(client.getInputStream()); // 根据顺序读取对方写过来的内容 String serviceName = input.readUTF(); String methodName = input.readUTF(); Class<?>[] parameterTypes = (Class<?>[]) input.readObject(); Object[] arguments = (Object[]) input.readObject(); Class serviceClass = serviceRegister.get(serviceName); if (serviceClass == null) { throw new ClassNotFoundException(serviceName + " 没有找到!"); } Method method = serviceClass.getMethod(methodName, parameterTypes); Object result = method.invoke(serviceClass.newInstance(), arguments); output = new ObjectOutputStream(client.getOutputStream()); output.writeObject(result); } catch (Exception e) { e.printStackTrace(); } finally { try { // 这里就不写 output!=null才关闭这个逻辑了 output.close(); input.close(); client.close(); } catch (IOException e) { e.printStackTrace(); } } } }}其次需要一个客户端:import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import java.net.InetSocketAddress;import java.net.Socket;/** * RPC 客户端 */public class RPCclient<T> { /** * 通过动态署理将参数发送已往到 RPCServer ,RPCserver 返回效果这个方法处置惩罚成为正确的实体 */ public static <T> T getRemoteProxyObj(final Class<T> service, final InetSocketAddress addr) { return (T) Proxy.newProxyInstance(service.getClassLoader(), new Class<?>[]{service}, new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Socket socket = null; ObjectOutputStream out = null; ObjectInputStream input = null; try { socket = new Socket(); socket.connect(addr); // 将实体类,参数,发送给远程挪用方 out = new ObjectOutputStream(socket.getOutputStream()); out.writeUTF(service.getSimpleName()); out.writeUTF(method.getName()); out.writeObject(method.getParameterTypes()); out.writeObject(args); input = new ObjectInputStream(socket.getInputStream()); return input.readObject(); } catch (Exception e) { e.printStackTrace(); } finally { out.close(); input.close(); socket.close(); } return null; } }); }}再来一个测试的远程方法。

public interface Tinterface { String send(String msg);}public class TinterfaceImpl implements Tinterface { @Override public String send(String msg) { return "send message " + msg; }}测试代码如下:import com.huifer.admin.rpc.Tinterface;import com.huifer.admin.rpc.TinterfaceImpl;import java.net.InetSocketAddress;public class RunTest { public static void main(String[] args) { new Thread(new Runnable() { @Override public void run() { RPCServer rpcServer = new RPCServer(); rpcServer.register(Tinterface.class, TinterfaceImpl.class); rpcServer.start(10000); } }).start(); Tinterface tinterface = RPCclient.getRemoteProxyObj(Tinterface.class, new InetSocketAddress("localhost", 10000)); System.out.println(tinterface.send("rpc 测试用例")); }}输出 send message rpc 测试用例。异步消息中间件常见的消息中间件有 Kafka、ActiveMQ、RabbitMQ、RocketMQ ,常见的协议有 AMQP、MQTTP、STOMP、XMPP。这里差池消息行列举行拓展了,详细如何使用还是请移步官网。


本文关键词:米乐体育,一文,解说,什么,是,微,服务,之间,如何,独立

本文来源:米乐体育-www.foodisforsharing.com

上一篇: 什么是服务业六西格玛治理 六西格玛治理适用于服务业吗 下一篇:没有了
米乐体育(中国)科技有限公司官网

米乐体育(中国)科技有限公司官网

  • 上海市上海市上海区依务大楼474号
  • 053-124063408
  • admin@foodisforsharing.com
手机:13108674341

关于我们

  • 企业简介
  • 企业文化
  • 企业理念

产品展示

  • 产品一类
  • 产品二类
  • 产品三类
  • 产品四类

新闻资讯

联系我们

Copyright © 2000-2022 www.foodisforsharing.com. 米乐体育科技 版权所有 备案号:ICP备22506193号-6
友情链接: 英亚体育手机app下 澳门人威尼斯 开云体育平台官网