最近很火的消息中间件 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.
*/
@Configuration
public 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.
*/
@Component
public 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
@Component
public 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 Manager
和Kafka 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!