Go micor 入门

1.1.1. go-micro简介 Go Micro是一个插件化的基础框架,基于此可以构建微服务,Micro的设计哲学是可插拔的插件化架构

在架构之外,它默认实现了consul作为服务发现(2019年源码修改了默认使用mdns),通过http进行通信,通过protobuf和json进行编解码

1.1.2. go-micro的主要功能

服务发现:自动服务注册和名称解析。服务发现是微服务开发的核心。当服务A需要与服务B通话时,它需要该服务的位置。默认发现机制是多播DNS(mdns),一种零配置系统。您可以选择使用SWIM协议为p2p网络设置八卦,或者为弹性云原生设置设置consul
负载均衡:基于服务发现构建的客户端负载均衡。一旦我们获得了服务的任意数量实例的地址,我们现在需要一种方法来决定要路由到哪个节点。我们使用随机散列负载均衡来提供跨服务的均匀分布,并在出现问题时重试不同的节点
消息编码:基于内容类型的动态消息编码。客户端和服务器将使用编解码器和内容类型为您无缝编码和解码Go类型。可以编码任何种类的消息并从不同的客户端发送。客户端和服务器默认处理此问题。这包括默认的protobuf和json
请求/响应:基于RPC的请求/响应,支持双向流。我们提供了同步通信的抽象。对服务的请求将自动解决,负载平衡,拨号和流式传输。启用tls时,默认传输为http / 1.1或http2 Async
Messaging:PubSub是异步通信和事件驱动架构的一流公民。事件通知是微服务开发的核心模式。启用tls时,默认消息传递是点对点http/ 1.1或http2 可插拔接口:Go Micro为每个分布式系统抽象使用Go接口,因此,这些接口是可插拔的,并允许Go
Micro与运行时无关,可以插入任何基础技术 插件地址:`https://github.com/micro/go-plugins`

1.1.3. go-micro通信流程

 Server监听客户端的调用,和Brocker推送过来的信息进行处理。并且Server端需要向Register注册自己的存在或消亡,这样Client才能知道自己的状态Register服务的注册的发现,Client端从Register中得到Server的信息,然后每次调用都根据算法选择一个的Server进行通信,当然通信是要经过编码/解码,选择传输协议等一系列过程的如果有需要通知所有的Server端可以使用Brocker进行信息的推送,Brocker 信息队列进行信息的接收和发布

1.1.4. go-micro核心接口

go-micro之所以可以高度订制和他的框架结构是分不开的,go-micro由8个关键的interface组成,每一个interface都可以根据自己的需求重新实现,这8个主要的inteface也构成了go-micro的框架结构

在这里插入图片描述

. Go Micro接口详解

1.1.1. Transort通信接口

通信相关接口

type Socket interface {
   Recv(*Message) error
   Send(*Message) error
   Close() error
}

type Client interface {
   Socket
}

type Listener interface {
   Addr() string
   Close() error
   Accept(func(Socket)) error
}

type Transport interface {
   Dial(addr string, opts ...DialOption) (Client, error)
   Listen(addr string, opts ...ListenOption) (Listener, error)
   String() string
}

1.1.2. Codec编码接口

编解码,底层也是protobuf

type Codec interface {
   ReadHeader(*Message, MessageType) error
   ReadBody(interface{}) error
   Write(*Message, interface{}) error
   Close() error
   String() string
}
1.1.3. Registry注册接口
服务注册发现的实现:etcd、consul、mdns、kube-DNS、zk

type Registry interface {
   Register(*Service, ...RegisterOption) error
   Deregister(*Service) error
   GetService(string) ([]*Service, error)
   ListServices() ([]*Service, error)
   Watch(...WatchOption) (Watcher, error)
   String() string
   Options() Options
}

1.1.4. Selector负载均衡

根据不同算法请求主机列表

type Selector interface {
   Init(opts ...Option) error
   Options() Options
   // Select returns a function which should return the next node
   Select(service string, opts ...SelectOption) (Next, error)
   // Mark sets the success/error against a node
   Mark(service string, node *registry.Node, err error)
   // Reset returns state back to zero for a service
   Reset(service string)
   // Close renders the selector unusable
   Close() error
   // Name of the selector
   String() string
}

1.1.5. Broker发布订阅接口

pull push watch

type Broker interface {
   Options() Options
   Address() string
   Connect() error
   Disconnect() error
   Init(...Option) error
   Publish(string, *Message, ...PublishOption) error
   Subscribe(string, Handler, ...SubscribeOption) (Subscriber, error)
   String() string
}

1.1.6. Client客户端接口

type Client interface {
   Init(...Option) error
   Options() Options
   NewMessage(topic string, msg interface{}, opts ...MessageOption) Message
   NewRequest(service, method string, req interface{}, reqOpts ...RequestOption) Request
   Call(ctx context.Context, req Request, rsp interface{}, opts ...CallOption) error
   Stream(ctx context.Context, req Request, opts ...CallOption) (Stream, error)
   Publish(ctx context.Context, msg Message, opts ...PublishOption) error
   String() string
}

1.1.7. Server服务端接口

type Server interface {
   Options() Options
   Init(...Option) error
   Handle(Handler) error
   NewHandler(interface{}, ...HandlerOption) Handler
   NewSubscriber(string, interface{}, ...SubscriberOption) Subscriber
   Subscribe(Subscriber) error
   Register() error
   Deregister() error
   Start() error
   Stop() error
   String() string
}

1.1.8. Serveice接口

type Service interface {
   Init(...Option)
   Options() Options
   Client() client.Client
   Server() server.Server
   Run() error
   String() string
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Micro Python 是一种运行在微处理器上的 Python 解释器。Micro Python 保持了 Python 的简单易用和高效性,同时还增加了一些微处理器相关的功能,使得用户可以更方便地控制微处理器。 Micor Python 手册详细介绍了 Micro Python 的各种功能、用法和操作方法。手册的内容覆盖了 Micro Python 的基础语法、数字、字符串、列表、元组、字典、函数、模块等方面。手册还介绍了如何在 Micro Python 上使用各种传感器和执行器,如 LED、温度传感器、加速度计等。 手册还提供了丰富的实例代码,用户可以仿照实例进行程序开发。手册还介绍了 Micro Python 的调试方法,如 REPL、串口、网络调试等。 总之,Micro Python 手册为用户提供了全面、详尽的 Micro Python 学习资料,帮助用户更好地掌握 Micro Python 语言,进行自己的微处理器项目开发。 ### 回答2: Micro Python手册是一本介绍Micro Python编程语言的参考手册。Micro Python是一种微型Python编程语言,适用于微控制器和嵌入式系统的开发。Micro Python手册包含了该编程语言的基础知识、语法、语义、函数库等方面的详细介绍,对初学者和开发者都非常有用。 Micro Python手册具有很好的系统性和完整性,可以帮助读者快速掌握Micro Python的相关知识。手册中首先介绍了Micro Python的基本语法和数据类型,包括数字、字符串、列表、字典等常用数据结构。此外,手册还详细介绍了Micro Python的模块、类和函数等内容,帮助读者深入了解Micro Python编程的各个方面。 Micro Python手册还提供了大量的例子和实践操作,让读者可以快速学习Micro Python编程并且掌握实际应用技巧。手册中详细讲解了Micro Python的常用库,如GPIO、SPI、I2C等,可以帮助读者快速构建各种应用场景。另外,在手册中还介绍了一些基于Micro Python的开源项目,如Micro Web Server、Micro Python Editor等,可以让读者更好地了解和利用Micro Python语言。 综上所述,Micro Python手册是一本详尽的介绍Micro Python编程语言的参考手册,可以帮助读者深入了解Micro Python的各个方面,并且帮助读者快速掌握Micro Python编程和实际应用技巧。如果您正在学习或者使用Micro Python编程语言,Micro Python手册可以成为您的首选参考书。 ### 回答3: Micro Python手册是一本关于Micro Python编程语言的使用手册。Micro Python是一种面向嵌入式系统的Python编程语言,主要用于单片机等低资源嵌入式设备的编程。手册主要介绍了Micro Python的语法、数据类型、控制语句、函数、模块、类等基本知识,并通过示例代码来演示如何使用Micro Python进行开发。手册还介绍了Micro Python在不同硬件平台上的使用方法,以及如何使用Micro Python连接到网络、控制外设等高级应用。 在手册中,我们可以学到如何使用Micro Python轻松地构建低成本的嵌入式系统,以及如何将Python编程语言带入到嵌入式设备领域中。Micro Python手册也提供了一个快速上手Micro Python编程的入门指南,对于嵌入式设备的开发者来说,这是一个非常好的资源。 总之,Micro Python手册是一本非常实用的工具书,它提供了一系列有关Micro Python的实用技巧和示例代码,帮助用户了解和掌握这种编程语言,让用户能够轻松地开发和调试嵌入式系统。对于需要使用Micro Python的开发者来说,这是一本非常有用的参考资料。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值