このセクションでは、マイクロメッセージのサブスクリプションおよび発行内容を説明します
この記事を読む前に次の知識ベースが必要になる場合があります
- golang分散型マイクロサービスフレームワークが行く-マイクロ入門注1:GO-ミクロ環境の構築、
- golang行く-マイクロツールのミクロサービスフレームワーク2.1マイクロマイクロのAPI入門ノート
- 2.2マイクロマイクロWebツールのgolangマイクロサービスフレームワークに行くマイクロエントリーノート
ブローカープロキシ
行く-マイクロはデフォルトの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
得られません
推奨読書
経験とソースコードを提供ランディングサイトのアドレスを得るために、マイクロチャネルの二次元コードをスイープ
楽屋管理フレームワークのrestgo管理者を行くgolang言語のオープンソースプロジェクト