再见RocketMQ!全新一代消息中间件,带可视化管理,文档贼友好!

Posted JAVA炭烧

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了再见RocketMQ!全新一代消息中间件,带可视化管理,文档贼友好!相关的知识,希望对你有一定的参考价值。

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

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 consum

最后

最近我整理了整套《JAVA核心知识点总结》,说实话 ,作为一名Java程序员,不论你需不需要面试都应该好好看下这份资料。拿到手总是不亏的~我的不少粉丝也因此拿到腾讯字节快手等公司的Offer

Java进阶群

以上是关于再见RocketMQ!全新一代消息中间件,带可视化管理,文档贼友好!的主要内容,如果未能解决你的问题,请参考以下文章

再见,Kafka!RocketMQ已成气候!

再见,顺序执行!异步RPC还得靠消息队列中间件!

再见,Kafka!这个新一代消息中间件,腾讯华为都用疯了?

新一代消息中间件,腾讯华为都用疯了,RocketMQ淘汰倒计时?

全新一代API网关,带可视化管理,文档贼友好!

一文带你认知定时消息发布RocketMQ