Go Micro 마스터 디자인
Go - micro 프레임 워 크 는 마이크로 서비스 분포 식 의 프레임 워 크 로 개발 효율 을 대폭 높 일 수 있다.원본 주소:https://github.com/micro/go-microGo-micro많은 특성 을 가지 고 있 습 니 다:
주 인터페이스
전체 Go Micro 는 이 8 개의 인터페이스 로 구성 되 어 있다. 다시 말 하면 이 8 개의 인 터 페 이 스 를 이해 하고 그 중의 하 나 를 자세히 연구 하면 전체 구조의 실현 과 구 조 를 알 수 있다.다음은 이 8 개의 인 터 페 이 스 를 살 펴 보 겠 습 니 다.
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
}
Codec
전송 방식 이 있 습 니 다. 다음은 전송 코드 와 디 코딩 문 제 를 해결 해 야 합 니 다. go - micro 는 여러 가지 인 코딩 디 코딩 방식 이 있 습 니 다. 기본 적 인 실현 방식 은 protobuf 입 니 다. 물론 다른 실현 방식 도 있 습 니 다. json, protobuf, jsonrpc, mercury 등 이 있 습 니 다.
소스 코드
type Codec interface {
ReadHeader(*Message, MessageType) error
ReadBody(interface{}) error
Write(*Message, interface{}) error
Close() error
String() string
}
type Message struct {
Id uint64
Type MessageType
Target string
Method string
Error string
Header map[string]string
}
Codec 인터페이스의 Write 방법 은 인 코딩 과정 이 고 두 개의 Read 는 디 코딩 과정 입 니 다.
Registry
서비스의 등록 과 발견, 현재 실 현 된 consul, mdns, etcd, etdv 3, zookeeper, kubernetes 등,
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
}
Selector
Registry 를 바탕 으로 selector 는 클 라 이언 트 등급 의 부하 균형 으로 클 라 이언 트 가 서비스 에 요청 을 보 낼 때 selector 는 서로 다른 알고리즘 에 따라 Registery 의 호스트 목록 에서 사용 가능 한 Service 노드 를 얻어 통신 을 한다.현재 실 현 된 순환 알고리즘 과 랜 덤 알고리즘 은 기본적으로 랜 덤 알고리즘 이다.
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
}
기본 값 은 로 컬 캐 시 입 니 다. 현재 구현 되 는 것 은 Blacklist, label, named 등 이 있 습 니 다.
Broker
Broker 는 메시지 발표 와 구독 의 인터페이스 입 니 다.간단 한 예 이다. 서비스의 노드 가 고정 되 지 않 기 때문에 모든 서비스 행 위 를 수정 해 야 하 는 수요 가 있 으 면 서비스 가 특정한 주 제 를 구독 할 수 있다. 정보 가 발표 되면 모든 감청 서 비 스 는 정 보 를 받 고 귀하 의 수요 에 따라 해당 하 는 행 위 를 할 수 있다.
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
}
Broker 의 기본 적 인 실현 방식 은 http 방식 이지 만 이런 방식 은 생산 환경 에서 사용 하지 마 십시오.go - plugins 에는 성숙 한 메시지 큐 실현 방식 이 많 습 니 다. kafka, nsq, rabbitmq, redis 등 이 있 습 니 다.
Client
Client 는 서 비 스 를 요청 하 는 인터페이스 로 Transport 와 Codec 를 패키지 하여 rpc 호출 을 하고 Brocker 를 패키지 하여 정 보 를 발표 합 니 다.
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
}
물론 그 는 쌍 공 통신 스 트림 이라는 구체 적 인 실현 방식 과 사용 방식 을 지지 하 며 앞으로 상세 하 게 설명 할 것 이다.기본적으로 rpc 구현 방식 입 니 다. grpc 와 http 방식 도 있 습 니 다. go - plugins 에서 찾 을 수 있 습 니 다.
Server
서버 이름 보니까 뭐 하 는 사람 인지 다 들 알 겠 다.rpc 요청 을 기다 리 고 있 습 니 다.broker 의 구독 정 보 를 감청 하고 정보 큐 의 푸 시 등 을 기다린다.
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
}
Service
Service 는 Client 와 Server 의 패키지 입 니 다. 그 는 일련의 방법 을 포함 하여 Service 와 Client 를 초기 화하 여 rpc 서 비 스 를 간단하게 만 들 수 있 도록 합 니 다.
type Service interface {
Init(...Option)
Options() Options
Client() client.Client
Server() server.Server
Run() error
String() string
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
set containerThere is no built-in set container in Go How to implement Set struct{} => type struct{}{} => 0bytes How to create set :=...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.