From 1f493624b523cdd5ee5acc40b932bd66615c1e18 Mon Sep 17 00:00:00 2001 From: Edward Date: Tue, 28 Apr 2020 17:23:57 +0800 Subject: [PATCH] add images for pub/sub pattern & update readme --- gomore/messaging/README.md | 8 ++++++-- images/pub-sub-pattern-0.png | Bin 0 -> 25455 bytes images/pub-sub-pattern-1.png | Bin 0 -> 13716 bytes 3 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 images/pub-sub-pattern-0.png create mode 100644 images/pub-sub-pattern-1.png diff --git a/gomore/messaging/README.md b/gomore/messaging/README.md index 31fa4c7..c32c446 100644 --- a/gomore/messaging/README.md +++ b/gomore/messaging/README.md @@ -2,6 +2,10 @@ 发布-订阅是一种消息传递模式,基本设计原则是将消息发布者和提供者分开,常常用于在不同组件之间传递消息。 -它有点类似于观察者行为设计模式,但是发布订阅模式往往要依赖一个中介<通常是各类的消息中间件,消息队列> +![图示关系](../../images/pub-sub-pattern-0.png) +发布订阅模式往往实现为<消息代理,消息中间件,消息队列>等 -有三个关键组是:消息本身、消息主题、订阅用户。 +该模式中的三个关键类型:消息本身、消息主题、订阅用户。 +![图示关系](../../images/pub-sub-pattern-1.png) + +图片来源:[pubsub-pattern.md](https://github.com/imsardine/dev-notes/blob/source/docs/pubsub-pattern.md) diff --git a/images/pub-sub-pattern-0.png b/images/pub-sub-pattern-0.png new file mode 100644 index 0000000000000000000000000000000000000000..165489d887eeeef507ef730acf89cc1427c05843 GIT binary patch literal 25455 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 literal 0 HcmV?d00001 diff --git a/images/pub-sub-pattern-1.png b/images/pub-sub-pattern-1.png new file mode 100644 index 0000000000000000000000000000000000000000..84d4ffb853da553ce2265d1f050b049bb7aaf1e2 GIT binary patch literal 13716 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