范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

下一代MQ中间件,不来了解下?

  最近项目中准备使用消息中间件  Apache Pulsar  ,借着机会先做个简单了解吧。 Apache Pulsar
  Apache Pulsar是Apache软件基金会顶级项目,是下一代 云原生分布式消息流 平台。
  Pulsar 作为下一代云原生分布式消息流平台,支持  多租户、持久化存储、多机房跨区域数据复制  ,具有强一致性、高吞吐以及低延时的高可扩展流数据存储特性, 内置诸多其他系统商业版本才有的特性,是云原生时代解决实时消息流数据传输、存储和计算的最佳解决方案。
  Pulsar简介系统架构
  功能特色租户和命名空间(namespace)是 Pulsar 支持多租户的两个核心概念。在租户级别,Pulsar 为特定的租户预留合适的存储空间、应用授权与认证机制。在命名空间级别,Pulsar 有一系列的配置策略(policy),包括存储配额、流控、消息过期策略和命名空间之间的隔离策略。Pulsar 做了队列模型和流模型的统一,在 Topic 级别只需保存一份数据,同一份数据可多次消费。以流式、队列等方式计算不同的订阅模型大大提升了灵活度。Pulsar 使用计算与存储分离的云原生架构,数据从 Broker 搬离,存在共享存储内部。上层是无状态 Broker,复制消息分发和服务;下层是持久化的存储层 Bookie 集群。Pulsar 存储是分片的,这种构架可以避免扩容时受限制,实现数据的独立扩展和快速恢复。Pulsar 原生支持跨地域复制,因此 Pulsar 可以跨不同地理位置的数据中心复制数据。当数据中心中断或网络分区时,在多个数据中心存有消息副本尤为重要,提高可用性。Pulsar Functions 是基于 Pulsar 的轻量级流处理方式。Pulsar Functions 直接部署在 broker 节点上(或作为 Kubernetes 集群中的容器)。通过 Pulsar Functions,Pulsar 可以直接解决许多流处理任务,简化操作。  支持客户端  Java 客户端  C++ 客户端  .Net/C# 客户端  Go 客户端  NodeJS 客户端  Ruby 客户端  Pulsar安装与部署
  目前Pulsar不支持Window,下面通过Docker进行安装,可以参考官网 https://pulsar.apache.org/docs/next/getting-started-docker/
  同时可以安装Pulsar Manager,具体操作可以参考官方文档 https://pulsar.apache.org/docs/next/administration-pulsar-manager/
  其中Pulsar Manager 是一个网页式可视化管理与监测工具,支持多环境下的动态配置。可用于管理和监测租户、命名空间、topic、订阅、broker、集群等。  window环境使用docker推荐使用Docker Desktop,和linux一样可以通过docker命令管理镜像、部署容器等操作。  打开并启动Docker Desktop后,在终端执行命令执行
  _> docker search pulsar
  可以查询到pulsar相关的镜像
  镜像下载  这里我们选择分别下载红框的两个镜像,执行命令
  _> docker pull apachepulsar/pulsar _> docker pull apachepulsar/pulsar-manager   启动  启动Pulsar  docker run -it -p 6650:6650 -p 8080:8080        --mount source=pulsardata,target=/pulsar/data        --mount source=pulsarconf,target=/pulsar/conf        apachepulsar/pulsar bin/pulsar standalone 启动Pulsar Manager  docker run --name pulsar-manager -dit        -p 9527:9527 -p 7750:7750        -e SPRING_CONFIGURATION_FILE=/pulsar-manager/pulsar-manager/application.properties        apachepulsar/pulsar-manager
  添加用户:  for /f "tokens=1" %A in ("curl http://localhost:7750/pulsar-manager/csrf-token") do set CSRF_TOKEN=%A curl -X PUT "X-XSRF-TOKEN: %CSRF_TOKEN%"   -H "Cookie: XSRF-TOKEN=%CSRF_TOKEN%;"    -H "Content-Type: application/json" -d "{"name": "admin", "password": "123456", "description": "super user admin", "email": "admin@test.com"}"    "http://localhost:7750/pulsar-manager/users/superuser"
  访问:  http://localhost:9527/  用户名密码:admin/123456
  配置environments:  这里需要保证Pulsar Manager应用服务能够访问到Pulsar应用,由于都是通过Docker部署,配置Service URL需要使用网络IP,不要用localhost。
  管理界面:
  Pulsar与SpringBoot集成springboot version : 2.3.7.RELEASE  pulsar client: 2.10.2  通过Properties简单定义一些Broker相关的属性  @Data @ConfigurationProperties(prefix = "pulsar") public class PulsarProperties {          private String cluster;          private String namespace;      private String serverUrl;      private String token; } 通过配置定义了一些常用的组件,比如生产、消费工厂  @Configuration @EnableConfigurationProperties({PulsarProperties.class}) public class PulsarBootstrapConfiguration {      private final PulsarProperties properties;      public PulsarBootstrapConfiguration(PulsarProperties properties) {         this.properties = properties;     }      @Bean(destroyMethod = "close")     public PulsarClient pulsarClient() throws PulsarClientException {         ClientBuilder clientBuilder = PulsarClient.builder().serviceUrl(properties.getServerUrl());         return clientBuilder.build();     }      @Bean     public PulsarProducerFactory pulsarProducerFactory() throws PulsarClientException {         return new PulsarProducerFactory(pulsarClient(), properties);     }      @Bean     public PulsarConsumerFactory pulsarConsumerFactory() throws PulsarClientException {         return new PulsarConsumerFactory(pulsarClient(), properties);     }  } 启动服务,在服务启动后,通过实现SmartInitializingSingleton接口,完成容器基本启动(不包含Lazy的Bean)后,开始对消费者Consumer监听  @Slf4j @SpringBootApplication public class PulsarApplication implements SmartInitializingSingleton {      @Autowired     private PulsarConsumerFactory consumerFactory;      public static void main(String[] args) {         SpringApplication.run(PulsarApplication.class,args);     }      @Override     public void afterSingletonsInstantiated() {         startConsumerListener();     }      private void startConsumerListener(){         Consumer consumer = createConsumer();         if( consumer != null ){             while (!Thread.currentThread().isInterrupted()){                 CompletableFuture<? extends Message<?>> completableFuture = consumer.receiveAsync();                 Message<?> message = null;                 try {                     message = completableFuture.get();                 } catch (InterruptedException e) {                     Thread.currentThread().interrupt();                     log.error("错误",e);                 } catch (ExecutionException e) {                     log.error("错误",e);                 }                  if( message!=null ){                     try {                         log.info(" 接收消息:{} ", message.getValue() );                         consumer.acknowledge(message);                     } catch (PulsarClientException e) {                         consumer.negativeAcknowledge(message);                         throw new RuntimeException(e);                     }                 }             }         }     }      private Consumer createConsumer() {         try {             return consumerFactory.getConsumer(Constants.TOPIC_DEMO);         } catch (PulsarClientException e) {             log.error("创建consumer出错:{}", e.getMessage(),e);         }         return null;     } } 消息发送测试  @Slf4j @RunWith(SpringRunner.class) @SpringBootTest public class PulsarBootTests {      @Autowired     private PulsarProducerFactory producerFactory;      @Test     public void sendMessage() throws PulsarClientException {         Producer producer = producerFactory.getProducer(Constants.TOPIC_DEMO);          producer.send(" 测试消息: " + new Date());          producer.close();     }  } 检查消息接收情况  2023-02-05 12:05:14.043  INFO 23472 --- [ulsar-timer-6-1] o.a.p.c.impl.ConsumerStatsRecorderImpl   : [TOPIC_DEMO] [sub-TOPIC_DEMO] [7c2b2] Prefetched messages: 0 --- Consume throughput received: 0.02 msgs/s --- 0.00 Mbit/s --- Ack sent rate: 0.02 ack/s --- Failed messages: 0 --- batch messages: 0 ---Failed acks: 0 2023-02-05 12:06:16.425  INFO 23472 --- [           main] com.sucl.pulsar.PulsarApplication        :  接收消息: 测试消息: Sun Feb 05 12:06:16 CST 2023 结束语
  该篇主要通过官网对Apache Pulsar做了简单的了解与尝试,同时基于SpringBoot,以简单的示例代码实现了消息的发送与接收,其中各个组件仅仅使用了默认的配置,在生产环境需要根据Pulsar的特性以及官方API使其具有扩展性与易用性。

为何卖股票时,明明是全仓卖出,营业部却要分几次给你卖出?你有没有过这样的经历,就是在买卖股票时,明明下单时是全仓买入或是卖出的,结果营业部却要分几个批次给你买卖完成?其实造成这种现象的原因是证券营业部在撮合成交的过程中,没有遇到正好与你农贸市场的酿酒作坊里的酒是真的粮食酒吗?我的堂哥两口子在农贸市场卖散白酒已经有10多年了!最早是就是因为三叔家自己开小酒坊酿酒,堂哥两口子就在市场里卖自家酿造的白酒,后来三叔的酒坊不干以后,他们就从别家进酒售卖。因为经营伏特加和白酒同是烈酒,为什么一个卖遍全世界,一个只有中国人喝?在全球出售的伏特加都是原味的!而中国白酒,包括茅台酒,五粮液味道都是经过勾兑的!请问?你愿吃转基因粮食吗?你愿喝勾兑出色香味俱全的飮料吗?你愿喝勾兑酒吗?如果告诉你白酒是怎么酿造出街边十几元的自助火锅店为什么不会倒闭?从事餐饮的朋友告诉我,十几元的自助火锅看似很便宜,实际上全是套路,普通人根本吃不回本儿,所以自然而然就不会倒闭了。我们家小区楼下是一片底商,而且这个底商是可以用来经营餐饮的,所以有35岁以上的IT人士如果有一天被公司裁员了,该怎么办?记住,被裁员,绝对跟年龄无关,只会跟你的实力有关系。只是随着年龄的增大,一部分程序员就会被淘汰,从而引起淘汰率增加,让人有35岁以上就很难混的错觉。这里我以程序员为例子,回答一下这只知道做事,有求必应,但不会找领导聊天汇报工作,看到领导还不知道说什么,怎么办?我是秋羡职场十年工作经验,专注剖析工作上的心理博弈,实战经验,解决各种疑难杂症,可以关注我了解一下!看到这个问题的瞬间,我只想说题主是老实人啊,难得一见的大老实人啊,我的团队里要是做哪些兼职工作,可以月入2k?1,闲鱼花点时间的话,一个月12K应该是可以的2,各种返利这个如果你是有精力,时间,人力去做的话,一个月四五千应该是可以的3,社群卖货比如临期产品,高佣产品,特价产品,或者你有专门月薪5500有五险一金的工作和月薪一万没有五险一金的工作相比,哪个好?我认为,月薪5500元,有五险一金的工作好!尽管从静止的状态短期内来看和员工个体来说,月薪10000元,没有五险一金的工作,收入要略高一些。但从发展的动态长时期来看和员工整体队伍来我在单位工作了五年,上个月刚退休,现在老板把店转让了,能有什么补偿吗?我发现你真是个老财迷,老板转店跟你有屁事,就是他把老婆转让了也与你无关,财迷!这关系挺大的,这店他没资格转,必须由你继承,这是法律给你的权利,就是那些你不认识店的老板要转店,你也应家里有离不开儿女照顾的老人,儿女的日子怎么过的?今天谈谈这个问题!关于家里有离不开儿女照顾的老人,儿女的日子怎么过?别人家我不知道?我家的老人也就是我父亲!自从他摔坏了腿之后,一年比一年严重,再加上我继母去世!他一个人确实需要儿现在一个家庭存款100万困难吗?为什么呢?存款100万有困难,一个国企普通工薪阶层,如果抛去每月房贷日常正常支出,能富余3000元,那得存30年,三十年后岁数也50多了,这时候上有老下有小的,身体也会出故障,支出更大,因此
极米钟波做标准是为了更好地保护消费者近年来,家用智能投影机因解决了传统商用投影体积臃肿噪音大灯泡寿命等问题,越来越多地被消费者所接受。在近日由工业和信息化部四川省人民政府共同主办的2022世界显示产业大会上,极米科技软件测试丨单元测试框架怎么搭?新版的Junit5有哪些神奇之处?单元测试(unittesting),是指对软件中的最小可测试单元进行检查和验证。总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动嵌入式开发解除嵌入式闪存集成的案例几十年来,无论哪个行业,创新电子系统设计的主流策略都是将更多功能和更大存储容量集成到更少的芯片中,这导致了完整的片上系统(SoC)架构的兴起,使复杂的嵌入式系统能够围绕单个芯片进行双十二我给路虎星脉加了块大屏,雕塑家4K便携屏在车上能干嘛图蜘蛛MX便携屏其实是一种小众玩法,但随着掌机SwitchPSP玩家的兴起,越来越多的也人开始关注它。对于我而言,便携屏还能提升生产力,举个例子,外出拍摄修图时它就能扩展出更多显示iPhone14ProMax1TB顶配1个月深度评测,它真的香吗?(附样片60以下是12000字干货长文,阅读全文需15分钟,所有美图均原创拍摄,建议先赞后看,苹果用户双击一下屏幕,你会有不一样的体验,大家也可以点个赞,对我这种用心做评测的创作者支持一下。外原来真120Hz电视这么少!教你如何辨别真伪,四款65英寸电视推荐最近一段时间买电视的人不少,不同预算不同环境对于电视的要求也都不一样,不过最怕的就是一种情况,就是货不对板,买到的产品和自己想要的产品不一样。电视行业真有这种情况吗?其实还真有可能天玑8100加持,独显芯片Pro定制主摄80W闪充,高颜值vivo清仓了冬日生活打卡季时间来到这个节点后,手机市场变得热闹起来,多个厂商均有发布会,天玑9200以及骁龙8Gen2,应该会成为接下来的主角,但新机往往价格比较贵,618之前不会大跳水,如果造车8年,花了230多亿,贾跃亭终于要交车了?有一种造车,叫做贾跃亭式造车,从2014年开始,到现在已经是造了8年多,同时钱也花了30多亿美元,但至今还没有成功。不过,虽然这台车8年多没成功,但无数的网友,依然为贾跃亭打Cal中兴有点猛,把12G256G卖低到两千左右,6。92英寸无孔大屏很香中兴是屏下摄像手机的专业户,他已经连续三年推出屏下摄像产品,不过分析中兴的屏下机型都会有这样的感受价格过于昂贵了!就比如今年上线的中兴Axon40Ultra,最高价格达到7298元黑五购物节,沃尔玛电商逆袭亚马逊?沃尔玛电商开始向全球其他国家招募卖家。图为沃尔玛的墨西哥门店之一。(视觉中国图)每年11月底的黑色星期五,是美国一年中最重要的购物节。Captify统计了2022年黑五期间的搜索记未来已来,能随身携带的3DIMAX影院酷睿视G3Max头戴显示器评测几年前,我因为工作的关系,买过一台功能复杂的HTCVR设备,工作不需要以后,拿它玩过几次游戏和电影,实话说第一感觉确实很新鲜,但整体体验确实不咋地,主要是2个问题,一个是产品太重,