golang行く-マイクロマイクロサービスフレームワーク2.3マイクロ入門ノートを受けるとツールのニュースを公開します

このセクションでは、マイクロメッセージのサブスクリプションおよび発行内容を説明します

この記事を読む前に次の知識ベースが必要になる場合があります

ブローカープロキシ

行く-マイクロはデフォルトのHTTPブローカーでブローカーのHTTP / NATの/メモリ3種類をサポートし、を通じてマイクロブローカー・サービスとの間でメッセージを渡す必要があります。

一方、移動マイクロプラグインの強い形で次のようにいくつかの一般的なブローカーを提供します。


$ls

gocloud/  googlepubsub/  grpc/  kafka/  mqtt/  nats/  nsq/  proxy/  rabbitmq/  redis/  snssqs/  sqs/  stan/  stomp/

HTTP

HTTP HTTP非同期ブローカーブローカー、ソースコードに基づいておりgithub.com\micro\[email protected]\broker\broker.go、デフォルトでは、http DefaultBrokerです


var (
    DefaultBroker Broker = newHttpBroker()
)

httpbrokerは、実際の構造であります


type httpBroker struct {

    id      string  //微服务ID
    address string //主机地址
    opts    Options //一些配置
    mux *http.ServeMux  //通过这个监听其他端发送的http请求
    c *http.Client  //通过这个发送请求到其他端
    r registry.Registry 
    sync.RWMutex
    subscribers map[string][]*httpSubscriber  //订阅
    running     bool
    exit        chan chan error
    // offline message inbox
    mtx   sync.RWMutex 
    inbox map[string][][]byte   //数据缓存

}

することによりhttp.Clientにより、要求を送信するhttp.ServeMuxことで、実現要求リスニングinboxデータを格納します

繰り返します

初期化コードのRedisの次


//main.go

//初始化URL格式redis://密码@主机:端口/

b := redis.NewBroker(
        broker.Addrs("redis://user:secret@localhost:6379/"),
        )

//初始化

b.Init()

//连接

b.Connect()

// 新建service

service := grpc.NewService(
        micro.Name("go.micro.web.config"),
        micro.Version("latest"),
        micro.Broker(b),

    )

//初始化service
service.Init()
//启动,运行,监听
service.Run()

アプリケーションを起動するのRedisにブローカーを指定する必要があります


go run main.go --broker=redis

grpcの初期化

次のように初期化プロセスがあります


//main.go

import (
    "github.com/micro/go-plugins/broker/grpc"
)



// 建立连接

b := grpc.NewBroker()
b.Init()
b.Connect()

// 订阅事件
sub, _ := b.Subscribe("events")
defer sub.Unsubscribe()

// 发布事件
b.Publish("events", &broker.Message{

    Headers: map[string]string{"type": "event"},

    Body: []byte(`an event`),

})

アプリケーションを起動しgrpcにブローカーを指定する必要があります


go run main.go --broker=grpc

RabbitMQの初期化

次のように初期化プロセスがあります


//main.go

import (

    "github.com/micro/go-plugins/broker/grpc"

)

b := rabbitmq.NewBroker(

        broker.Addrs("amqp://用户名:密码@主机host:端口port"),

    )



    b.Init()

    b.Connect()

アプリケーションを起動するのRabbitMQにブローカーを指定する必要があります


go run main.go plugin.go --broker=rabbitmq

MQTT

次のように初期化プロセスがあります


//main.go

import (

    "github.com/micro/go-micro"

    "github.com/micro/go-plugins/broker/mqtt"

)

func main() {

    service := micro.NewService(

        micro.Name("my.service"),

        micro.Broker(mqtt.NewBroker()),

    )

    //...

}

アプリケーションを起動しMQTTにブローカーを指定する必要があります


go run main.go plugin.go --broker=mqtt

他の

その他のコードを読み取ることができます


$GOPATH/src/github.com/micro/go-plugins/broker

メッセージングのパブリッシュおよびサブスクライブ

micro.RegisterSubscriberを介してメッセージを実装するために購読

メインメッセージサブスクリプションAPIインターフェース最初のパラメータは、メッセージの件名を識別するように、第2のパラメータは、サービスインスタンスことを示しています。


// Register Struct as Subscriber

micro.RegisterSubscriber("go.micro.srv.testsrv", service.Server(), new(subscriber.Testsrv))

// Register Function as Subscriber

micro.RegisterSubscriber("go.micro.srv.testsrv", service.Server(), subscriber.Handler)

三番目のパラメータは、第三のパラメータは、ハンドラを関数とすることができることに注意することが重要で、それを達成することができます

func Handler(ctx context.Context, msg *testsrv.Message) error構造体の方法は、内部マイクロ自動的にパラメータの種類に応じて適合されます。構造体は、複数で実施することができるfunc Handler(ctx context.Context, msg *testsrv.Message) error方法のタイプ

購読broker.Subscribeによって達成

ブローカは、以下のインターフェースを提供します


type Broker interface {

    Init(...Option) error

    Options() Options

    Address() string

    Connect() error

    Disconnect() error

    Publish(topic string, m *Message, opts ...PublishOption) error

    Subscribe(topic string, h Handler, opts ...SubscribeOption) (Subscriber, error)

    String() string

}
  • イベントへの購読、対象のトピック代わって、時間イベントハンドラ

  • 出版イベントを公開

ハンドラの定義されたメッセージハンドラ

上記に次のように説明し、ハンドラハンドラに関する


type Handler func(Event) error

// Event is given to a subscription handler for processing

type Event interface {

    Topic() string

    Message() *Message

    Ack() error

}



type Message struct {

    Header map[string]string

    Body   []byte

}

broker.Publishによって達成出版

たとえば、次のように


// 建立连接

b := grpc.NewBroker()

b.Init()

b.Connect()
// 订阅事件

sub, _ := b.Subscribe("events")

defer sub.Unsubscribe()

// 发布事件

b.Publish("events", &broker.Message{

    Headers: map[string]string{"type": "event"},

    Body: []byte(`an event`),

})

投稿マイクロによって実装公開します

たとえば、次のように


micro publish "go.micro.web.config" "hello"

戦闘とコード

効果

コードをダウンロードしてbroker.zip抽出するために、techidea8.com/microapp/broker次の実行、神経質図の効果を
効果

  • 発表されたJSON形式の文字列に注意してください。
 micro publish go.micro.srv.broker "{\"say\":\"这是测试消息\"}"

コードを取得

世間の注目の返事はmicro-broker得られません
いいえ公共betaideaありません

推奨読書

経験とソースコードを提供ランディングサイトのアドレスを得るために、マイクロチャネルの二次元コードをスイープ

楽屋管理フレームワークのrestgo管理者を行くgolang言語のオープンソースプロジェクト

タッチジェスチャーをサポートしています、あなたはカレンダープラグインの周りにスライドすることができます

あなたは18のインターネットのビジネスモデルを知っている必要があります

おすすめ

転載: www.cnblogs.com/techidea8/p/11430375.html