前言

本地Docker部署Pulsar消息代理实现消息发布和消息订阅

介绍

相关概念,后面有时间再花时间整理下。

实践步骤

1.使用dokcer本地部署pulsar

docker run -it \
-p 6650:6650 \
-p 8080:8080 \
--mount source=pulsardata,target=/pulsar/data \
--mount source=pulsarconf,target=/pulsar/conf \
apachepulsar/pulsar:2.7.1 \
bin/pulsar standalone

  

2.docker ps -a 查看pulsar运行是否正常,可以看到下图已经部署成功

pulsar连接地址:http://localhost:8080

         pulsar://localhost:6650

3.使用C#客户端Publish Message到pulsar broker中

(1)为了演示,我这里创建了一个C#控制台项目

(2)我们使用官网推荐的C# pulsar客户端包,添加安装DotPulsar nuget包

(3)创建client

  //1。创建pulsar客户端
var client = PulsarClient.Builder()
.ServiceUrl(new Uri("pulsar://localhost:6650"))
.RetryInterval(new TimeSpan(3))
.Build();

(4)创建生产者,发送消息

            //2、创建Pulsar Producer(生产者)
var producer = client.NewProducer()
.Topic("persistent://public/default/mytopic")
.Create();
var data = Encoding.UTF8.GetBytes("Hello Pulsar");
await producer.Send(data);

上图可见显示创建producer成功。

(5)下面再创建一个客户端来消费发送者发送的消息(“Hello Pulsar”)。

            //2、创建Pulsar Producer(消费者)
var consumer = client.NewConsumer()
.SubscriptionName("MySubscription")
.Topic("persistent://public/default/mytopic")
.Create();

//3.消费消息
await foreach (var message in consumer.Messages())
{
Console.WriteLine("Received: " + Encoding.UTF8.GetString(message.Data.ToArray()));
}

见上图,发布者发送消息成功被订阅者消费。

4.代码示例

//PublisherClient
static async Task Main(string[] args)
{
Console.WriteLine("Hello Pulsar");

//1。创建pulsar客户端
var client = PulsarClient.Builder()
.ServiceUrl(new Uri("pulsar://localhost:6650"))
.RetryInterval(new TimeSpan(3))
.Build();

//2、创建Pulsar Producer(生产者)
var producer = client.NewProducer()
.Topic("persistent://public/default/mytopic")
.Create();

for (int i = 0; i < 5; i++)
{
var data = Encoding.UTF8.GetBytes($"Hello Pulsar {i}");
await producer.Send(data);
Console.WriteLine($"发送消息成功");
} Console.ReadKey();
} //SubscriberClient
static async Task Main(string[] args)
{
//1。创建pulsar客户端
var client = PulsarClient.Builder()
.ServiceUrl(new Uri("pulsar://localhost:6650"))
.RetryInterval(new TimeSpan(3))
.Build();

//2、创建Pulsar Producer(消费者)
var consumer = client.NewConsumer()
.SubscriptionName("MySubscription")
.Topic("persistent://public/default/mytopic")
.Create();

//3.消费消息
await foreach (var message in consumer.Messages())
{
Console.WriteLine("Received: " + Encoding.UTF8.GetString(message.Data.ToArray()));
}


Console.ReadKey();
}

Pulsar部署和实践(一)的更多相关文章

  1. Cobbler自动化部署最佳实践

    第1章 Cobbler自动化部署最佳实践 运维自动化在生产环境中占据着举足轻重的地位,尤其是面对几百台,几千台甚至几万台的服务器时,仅仅是安装操作系统,如果不通过自动化来完成,根本是不可想象的. 面对 ...

  2. tomcat部署最佳实践(一)

    Tomcat部署最佳实践 标签: linux 笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 tomcat是玩web软件必会技能之一,今天我给大家介绍一下tomc ...

  3. 【公开课】【阿里在线技术峰会】魏鹏:基于Java容器的多应用部署技术实践

    对于公开课,可能目前用不上这些,但是往往能在以后想解决方案的时候帮助到我.以下是阿里对公开课的整理 摘要: 在首届阿里巴巴在线峰会上,阿里巴巴中间件技术部专家魏鹏为大家带来了题为<基于Java容 ...

  4. Elasticstack 5.1.2 集群日志系统部署及实践

    Elasticstack 5.1.2 集群日志系统部署及实践 一.ELK Stack简介 ELK Stack 是Elasticsearch.Logstash.Kibana三个开源软件的组合,在实时数据 ...

  5. 转: 微博的多机房部署的实践(from infoq)

    转:  http://www.infoq.com/cn/articles/weibo-multi-idc-architecture 在国内网络环境下,单机房的可靠性无法满足大型互联网服务的要求,如机房 ...

  6. ASP.NET Core Docker jexus nginx部署-CentOS实践版

    本文用图文的方式记录了我自己搭建centos+asp.net core + docker + jexus + nginx的整个过程,希望对有同样需求的朋友有一定的参考作用. 本文主要内容如下: cen ...

  7. (转)Cobbler自动化部署最佳实践

    原文:http://www.xuliangwei.com/xubusi/446.html 运维自动化在生产环境中占据着举足轻重的地位,尤其是面对几百台,几千台甚至几万台的服务器时,仅仅是安装操作系统, ...

  8. Kubernetes 服务部署最佳实践(二) ——如何提高服务可用性

    引言 上一篇文章我们围绕如何合理利用资源的主题做了一些最佳实践的分享,这一次我们就如何提高服务可用性的主题来展开探讨. 怎样提高我们部署服务的可用性呢?K8S 设计本身就考虑到了各种故障的可能性,并提 ...

  9. 企业运维 | MySQL关系型数据库在Docker与Kubernetes容器环境中快速搭建部署主从实践

    [点击 关注「 WeiyiGeek」公众号 ] 设为「️ 星标」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 希望各位看友[关注.点赞.评论.收藏.投币],助力每一个梦想. 本章目录 目录 ...

随机推荐

  1. ES6学习笔记(4)- 解构

    一.解构的意义 二.对象解构 三.数组解构

  2. Flask面试问题

    1,什么是Flask,有什么优点?概念解释Flask是一个Web框架,就是提供一个工具,库和技术来允许你构建一个Web应用程序.这个Web应用程序可以是一些Web页面,博客,wiki,基于Web的日里 ...

  3. The 2018 ACM-ICPC CCPC NING XIA G-Factories

    题意:在一棵数的叶子上建k个工厂保证,求两两距离之和的最小值. 思路:如果一个一个叶子节点去考虑去与否太麻烦了,直接考虑该节点的子树上选取几个作为工厂,利用树形DP,dp[u][i]表示的是u节点为根 ...

  4. P1071 潜伏者(JAVA语言)

    //HashMap大法好 题目描述 RR国和SS国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动.历尽艰险后,潜伏于SS国的RR 国间谍小CC终于摸清了 SS 国军用密码的编码规则: 1. S ...

  5. (二)SpringBoot启动过程的分析-环境信息准备

    -- 以下内容均基于2.1.8.RELEASE版本 由上一篇SpringBoot基本启动过程的分析可以发现在run方法内部启动SpringBoot应用时采用多个步骤来实现,本文记录启动的第二个环节:环 ...

  6. Android Studio 之 通过 Intent 完成点击按钮实现页面跳转

    •Intent 简介 Intent 是 Android 程序中各组件之间进行交互的一种重要方式: 它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据. Intent 有多个构造函数,其 ...

  7. 亲自动手实现Python+pygame中国象棋游戏

    功能1:实现游戏整体界面显示 一.创建基本的结构 代码如下: import time import pygame def main(): # 初始化pygame pygame.init() # 创建用 ...

  8. markdown的基础语法

    一级标题,一个#加空格 二级标题,两个#加空格 三级标题,三个#加空格 四级标题,四个#加空格 五级标题,五个#加空格 六级标题(最多支持到六级),六个#加空格 字体 粗体,两边加两个星号 斜体,两边 ...

  9. vue+quasar+electron+springboot+mysql撸一个TODO LIST 看板

    先看效果 写本项目的目的有几点: 学习下vue+electron桌面开发 学习下java和spring开发(本人一直使用PHP) 一直缺少一款能适合自己的TODO LIST软件,能有桌面端的 可直接打 ...

  10. Salesforce学习之路(九)Org的命名空间

    1. 命名空间的适用场景 每个组件都是命名空间的一部分,如果Org中设置了命名空间前缀,那么需使用该命名空间访问组件.否则,使用默认命名空间访问组件,系统默认的命名空间为"c". ...