最近很火的消息中间件Pulsar,本想学习下,发现网上很多都是介绍性能和比照Kafka的文章,实际的文章很少!于是对着官网文档实际了一波,写下了这篇文章,预计是国内第一篇Pulsar实战文章了,心愿对大家有所帮忙!

SpringBoot实战电商我的项目mall(40k+star)地址:https://github.com/macrozheng/mall

Pulsar简介

Pulsar是一个用于服务端到服务端的消息中间件,具备多租户、高性能等劣势。Pulsar最后由Yahoo开发,目前由Apache软件基金会治理。Pulsar采纳公布-订阅的设计模式,Producer公布音讯到Topic,Consumer订阅Topic、解决Topic中的音讯。

Pulsar具备如下个性:

  • Pulsar的单个实例原生反对集群。
  • 极低的公布提早和端到端提早。
  • 可无缝扩大到超过一百万个Topic。
  • 简略易用的客户端API,反对Java、Go、Python和C++。
  • 反对多种Topic订阅模式(独占订阅、共享订阅、故障转移订阅)。
  • 通过Apache BookKeeper提供的长久化音讯存储机制保障消息传递。

Pulsar装置

应用Docker装置Pulsar是最简略的,这次咱们应用Docker来装置。
  • 首先下载Pulsar的Docker镜像;
docker pull apachepulsar/pulsar:2.7.1
  • 下载实现后运行Pulsar容器,http协定拜访应用8080端口,pulsar协定(Java、Python等客户端)拜访应用6650端口。
docker run --name pulsar \-p 6650:6650 \-p 8080:8080 \--mount source=pulsardata,target=/pulsar/data \--mount source=pulsarconf,target=/pulsar/conf \-d apachepulsar/pulsar:2.7.1 \bin/pulsar standalone

Pulsar可视化

Pulsar Manager是官网提供的可视化工具,能够对多个Pulsar进行可视化治理,尽管性能不多,但也根本够用了,反对Docker部署。
  • 下载pulsar-manager的Docker镜像;
docker pull apachepulsar/pulsar-manager:v0.2.0
  • 下载实现后运行pulsar-manager容器,从9527端口能够拜访Web页面;
docker run -it --name pulsar-manager\    -p 9527:9527 -p 7750:7750 \    -e SPRING_CONFIGURATION_FILE=/pulsar-manager/pulsar-manager/application.properties \    -d apachepulsar/pulsar-manager:v0.2.0
  • 运行胜利后,咱们刚开始无法访问,须要创立管理员账号,这里创立账号为admin:apachepulsar
CSRF_TOKEN=$(curl http://localhost:7750/pulsar-manager/csrf-token)curl \    -H "X-XSRF-TOKEN: $CSRF_TOKEN" \    -H "Cookie: XSRF-TOKEN=$CSRF_TOKEN;" \    -H 'Content-Type: application/json' \    -X PUT http://localhost:7750/pulsar-manager/users/superuser \    -d '{"name": "admin", "password": "apachepulsar", "description": "test", "email": "username@test.org"}'
  • 创立胜利后,通过登录页面进行登录,拜访地址:http://192.168.5.78:9527

  • 登录胜利后咱们须要先配置一个环境,就是将须要治理的Pulsar服务配置下来,配置的Service URL为:http://192.168.5.78:8080

  • 能够查看Tenant列表;

  • 能够查看Topic列表和治理Topic;

  • 还能够查看Topic的详细信息。

Pulsar联合SpringBoot应用

Pulsar联合SpringBoot应用也是非常简单的,咱们能够应用Pulsar官网的Java SDK,也能够应用第三方的SpringBoot Starter。这里应用Starter,非常简单!
  • 首先在pom.xml中增加Pulsar相干依赖;
<!--SpringBoot整合Pulsar--><dependency>    <groupId>io.github.majusko</groupId>    <artifactId>pulsar-java-spring-boot-starter</artifactId>    <version>1.0.4</version></dependency>
  • 而后在application.yml中增加Pulsar的Service URL配置;
pulsar:  service-url: pulsar://192.168.5.78:6650
  • 再增加Pulsar的Java配置,申明两个Topic,并确定好发送的音讯类型;
/** * Pulsar配置类 * Created by macro on 2021/5/21. */@Configurationpublic class PulsarConfig {    @Bean    public ProducerFactory producerFactory() {        return new ProducerFactory()                .addProducer("bootTopic", MessageDto.class)                .addProducer("stringTopic", String.class);    }}
  • 创立Pulsar生产者,往Topic中发送音讯,这里能够发现Pulsar是反对间接发送音讯对象的;
/** * Pulsar音讯生产者 * Created by macro on 2021/5/19. */@Componentpublic class PulsarProducer {    @Autowired    private PulsarTemplate<MessageDto> template;    public void send(MessageDto message){        try {            template.send("bootTopic",message);        } catch (PulsarClientException e) {            e.printStackTrace();        }    }}
  • 创立Pulsar消费者,从Topic中获取并生产音讯,也是能够间接获取到音讯对象的;
/** * Pulsar音讯消费者 * Created by macro on 2021/5/19. */@Slf4j@Componentpublic class PulsarRealConsumer {    @PulsarConsumer(topic="bootTopic", clazz= MessageDto.class)    public void consume(MessageDto message) {        log.info("PulsarRealConsumer consume id:{},content:{}",message.getId(),message.getContent());    }}
  • 增加测试接口,调用生产者发送音讯;
/** * Pulsar功能测试 * Created by macro on 2021/5/19. */@Api(tags = "PulsarController", description = "Pulsar功能测试")@Controller@RequestMapping("/pulsar")public class PulsarController {    @Autowired    private PulsarProducer pulsarProducer;    @ApiOperation("发送音讯")    @RequestMapping(value = "/sendMessage", method = RequestMethod.POST)    @ResponseBody    public CommonResult sendMessage(@RequestBody MessageDto message) {        pulsarProducer.send(message);        return CommonResult.success(null);    }}
  • 在Swagger中调用接口进行测试;

  • 调用胜利后,控制台将输出如下信息,示意音讯曾经被胜利接管并生产了。
2021-05-21 16:25:07.756  INFO 11472 --- [al-listener-3-1] c.m.m.tiny.component.PulsarRealConsumer  : PulsarRealConsumer consume id:1,content:SpringBoot Message!

总结

上次写了一篇《吊炸天的 Kafka 图形化工具 Eagle,必须举荐给你!》介绍了Kafka的根本应用,这里和Pulsar做个比照。Pulsar对Docker反对无疑是更好的,官网文档也更全。比照下图形化工具Pulsar ManagerKafka Eagle,Pulsar的图形化工具感觉有点简陋。介于目前雅虎、腾讯、360等互联网大厂都在应用Pulsar,Pulsar的性能和稳定性应该是很不错的!

参考资料

Pulsar的官网文档很全,款式也不错,根本照着文档来一遍就能入门了。

  • Pulsar官网文档:https://pulsar.apache.org/doc...
  • SpringBoot Starter官网文档:https://github.com/majusko/pu...

我的项目源码地址

https://github.com/macrozheng...

本文 GitHub https://github.com/macrozheng/mall-learning 曾经收录,欢送大家Star!