spring boot pulsar,

  spring boot pulsar,

  

目录

一、添加pom.xml依赖二、脉冲星参数类三、脉冲星配置类四、不同消费数据类型的监听器五、脉冲星的核心服务类六、脉冲星整合春天的云

 

  

一、添加pom.xml依赖

父groupIdorg.springframework.boot/groupId artifact id spring-boot-starter-parent/artifact id版本2。7 .0/版本/父依赖项依赖项groupIdorg.springframework.boot/groupId artifact id spring-boot-starter-web/artifact id/依赖项groupIdorg.apache.pulsar/groupId artifact id pulsar-client/artifact id版本2。10 .0/版本/依赖项依赖项groupIdorg.projectlombok/groupId artifact id lombok/artifact id版本1。18 .24/提供的版本范围/范围/依赖项构建插件groupIdorg.apache.maven.plugins/groupId人工化的maven-编译器-插件

 

  

二、Pulsar 参数类

导入龙目岛。数据;导入org。spring框架。靴子。语境。属性。配置属性;导入org。spring框架。刻板印象。组件;导入Java。util。地图;/* * * * @作者:黄艺博* @ date : 2022/5/28 2:32 * @ description :脉冲星参数类*/@ Component @配置属性(前缀= tdmq。pulsar )@ data公共类pulsar属性{/* * *接入地址*/私有字符串服务url/** *命名空间贸发会议*/私有字符串tdcNamespace/** *角色上止点(上止点的缩写)的令牌*/私有字符串tdcToken/** *集群姓名*/私人字符串簇;/** * topicMap */private MapString,String topicMap/** *订阅*/private MapString,String subMap/** *开关:消费者可用

 

   off:Consumer断路     */    private String onOff;}

 

  

三、Pulsar 配置类

import org.apache.pulsar.client.api.AuthenticationFactory;import org.apache.pulsar.client.api.PulsarClient;import org.apache.pulsar.client.api.PulsarClientException;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.context.properties.EnableConfigurationProperties;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;/** * @Author: huangyibo * @Date: 2022/5/28 2:33 * @Description: Pulsar 配置类 */@Configuration@EnableConfigurationProperties(PulsarProperties.class)public class PulsarConfig {    @Autowired    PulsarProperties pulsarProperties;    @Bean    public PulsarClient getPulsarClient() {        try {            return PulsarClient.builder()                    .authentication(AuthenticationFactory.token(pulsarProperties.getTdcToken()))                    .serviceUrl(pulsarProperties.getServiceurl())                    .build();        } catch (PulsarClientException e) {            System.out.println(e);            throw new RuntimeException("初始化Pulsar Client失败");        }    }}

 

  

四、不同消费数据类型的监听器

import com.yibo.pulsar.pojo.User;import org.apache.pulsar.client.api.Consumer;import org.apache.pulsar.client.api.Message;import org.apache.pulsar.client.api.MessageListener;import org.springframework.stereotype.Component;/** * @Author: huangyibo * @Date: 2022/5/28 2:37 * @Description: */@Componentpublic class UserMessageListener implements MessageListener<User> {    @Override    public void received(Consumer<User> consumer, Message<User> msg) {        try {            User user = msg.getValue();            System.out.println(user);            consumer.acknowledge(msg);        } catch (Exception e) {            consumer.negativeAcknowledge(msg);        }    }}import org.apache.pulsar.client.api.Consumer;import org.apache.pulsar.client.api.Message;import org.apache.pulsar.client.api.MessageListener;import org.springframework.stereotype.Component;/** * @Author: huangyibo * @Date: 2022/5/28 2:37 * @Description: */@Componentpublic class StringMessageListener implements MessageListener<String> {    @Override    public void received(Consumer<String> consumer, Message<String> msg) {        try {            System.out.println(msg.getValue());            consumer.acknowledge(msg);        } catch (Exception e) {            consumer.negativeAcknowledge(msg);        }    }}

 

  

五、Pulsar的核心服务类

import com.yibo.pulsar.common.listener.StringMessageListener;import com.yibo.pulsar.common.listener.UserMessageListener;import com.yibo.pulsar.pojo.User;import org.apache.pulsar.client.api.*;import org.apache.pulsar.client.impl.schema.AvroSchema;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Bean;import org.springframework.stereotype.Component;import java.util.concurrent.TimeUnit;/** * @Author: huangyibo * @Date: 2022/5/28 2:35 * @Description: Pulsar的核心服务类 */@Componentpublic class PulsarCommon {    @Autowired    private PulsarProperties pulsarProperties;    @Autowired    private PulsarClient client;    @Autowired    private UserMessageListener userMessageListener;    @Autowired    private StringMessageListener stringMessageListener;    /**     * 创建一个生产者      * @param topic     topic name     * @param schema    schema方式     * @param <T>       泛型     * @return          Producer生产者     */    public <T> Producer<T> createProducer(String topic, Schema<T> schema) {        try {            return client.newProducer(schema)                    .topic(pulsarProperties.getCluster() + "/" + pulsarProperties.getTdcNamespace() + "/" + topic)                    .batchingMaxPublishDelay(10, TimeUnit.MILLISECONDS)                    .sendTimeout(10, TimeUnit.SECONDS)                    .blockIfQueueFull(true)                    .create();        } catch (PulsarClientException e) {            throw new RuntimeException("初始化Pulsar Producer失败");        }    }    /**     *      * @param topic             topic name     * @param subscription      sub name     * @param messageListener   MessageListener的自定义实现类     * @param schema            schema消费方式     * @param <T>               泛型     * @return                  Consumer消费者     */    public <T> Consumer<T> createConsumer(String topic, String subscription,                                   MessageListener<T> messageListener, Schema<T> schema) {        try {            return client.newConsumer(schema)                    .topic(pulsarProperties.getCluster() + "/" + pulsarProperties.getTdcNamespace() + "/" + topic)                    .subscriptionName(subscription)                    .ackTimeout(10, TimeUnit.SECONDS)                    .subscriptionType(SubscriptionType.Shared)                    .messageListener(messageListener)                    .subscribe();        } catch (PulsarClientException e) {            throw new RuntimeException("初始化Pulsar Consumer失败");        }    }        /**     * 异步发送一条消息     * @param message       消息体     * @param producer      生产者实例     * @param <T>           消息泛型     */    public <T> void sendAsyncMessage(T message, Producer<T> producer) {        producer.sendAsync(message).thenAccept(msgId -> {        });    }            /**     * 同步发送一条消息     * @param message       消息体     * @param producer      生产者实例     * @param <T>           泛型     * @throws PulsarClientException     */    public <T> void sendSyncMessage(T message, Producer<T> producer) throws PulsarClientException {        MessageId send = producer.send(message);        System.out.println();        System.out.println();        System.out.println();        System.out.println();        System.out.println(send);    }        //-----------consumer-----------    @Bean(name = "comment-publish-topic-consumer")    public Consumer<String> getCommentPublishTopicConsumer() {        return this.createConsumer(pulsarProperties.getTopicMap().get("comment-publish-topic"),                pulsarProperties.getSubMap().get("comment-publish-topic-test"),                stringMessageListener, Schema.STRING);    }    @Bean(name = "reply-publish-topic-consumer")    public Consumer<User> getReplyPublishTopicConsumer() {        return this.createConsumer(pulsarProperties.getTopicMap().get("reply-publish-topic"),                pulsarProperties.getSubMap().get("reply-publish-topic-test"),                userMessageListener, AvroSchema.of(User.class));    }    //-----------producer-----------    @Bean(name = "comment-publish-topic-producer")    public Producer<String> getCommentPublishTopicProducer() {        return this.createProducer(pulsarProperties.getTopicMap().get("comment-publish-topic"),Schema.STRING);    }    @Bean(name = "reply-publish-topic-producer")    public Producer<User> getReplyPublishTopicProducer() {        return this.createProducer(pulsarProperties.getTopicMap().get("reply-publish-topic"), AvroSchema.of(User.class));    }}

 

  

六、Pulsar整合Spring Cloud

后来发现如上代码会导致BUG-> 在更新Nacos配置之后 Consumer会挂掉经排查发现结果是由于@RefreshScope注解导致,此注解将摧毁Bean,PulsarConsumer和Producer都将被摧毁,只是说Producer将在下⼀次调⽤中完成重启,Consumer则不能重启,因为没有调⽤,那么怎么解决呢?

 

  就是发布系列事件以刷新容器

  

import lombok.extern.slf4j.Slf4j;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.ApplicationContext;import org.springframework.context.ApplicationEvent;import org.springframework.context.ApplicationListener;import org.springframework.stereotype.Component;/** * @Author: huangyibo * @Date: 2022/5/28 2:34 * @Description: */@Component@Slf4jpublic class RefreshPulsarListener implements ApplicationListener {    @Autowired    ApplicationContext applicationContext;    @Override    public void onApplicationEvent(ApplicationEvent event) {        if (event.getSource().equals("__refreshAll__")) {            log.info("Nacos配置中心配置修改 重启Pulsar====================================");            log.info("重启PulsarClient,{}", applicationContext.getBean("getPulsarClient"));            log.info("重启PulsarConsumer,{}", applicationContext.getBean("comment-publish-topic-consumer"));            log.info("重启PulsarConsumer,{}", applicationContext.getBean("reply-publish-topic-consumer"));        }    }}

参考:

 

  https://wenku.baidu.com/view/4d3337ab6b0203d8ce2f0066f5335a8102d266a7.html

  https://gitee.com/zhaoyuxuan66/pulsar-springcloud_boot-demo/tree/master/

  https://blog.csdn.net/weixin_56227932/article/details/122897075

  http://www.zzvips.com/article/219361.html

  https://mp.weixin.qq.com/s/4w0eucDNcrYrsiDXHzLwuQ

  到此这篇关于SpringBoot整合Pulsar的实现示例的文章就介绍到这了,更多相关SpringBoot整合Pulsar内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • spring编程式事务处理,spring编程事务
  • spring编程式事务处理,spring编程事务,详解Spring学习之编程式事务管理
  • spring的核心功能模块有几个,列举一些重要的spring模块
  • spring的核心功能模块有几个,列举一些重要的spring模块,七个Spring核心模块详解
  • spring注解和springmvc的注解,SpringMVC常用注解
  • spring注解和springmvc的注解,SpringMVC常用注解,详解springmvc常用5种注解
  • spring实现ioc的四种方法,spring的ioc的三种实现方式
  • spring实现ioc的四种方法,spring的ioc的三种实现方式,简单实现Spring的IOC原理详解
  • spring事务失效问题分析及解决方案怎么做,spring 事务失效情况
  • spring事务失效问题分析及解决方案怎么做,spring 事务失效情况,Spring事务失效问题分析及解决方案
  • spring5.0新特性,spring4新特性
  • spring5.0新特性,spring4新特性,spring5新特性全面介绍
  • spring ioc以及aop原理,springmvc aop原理
  • spring ioc以及aop原理,springmvc aop原理,深入浅析Spring 的aop实现原理
  • Spring cloud网关,spring cloud zuul作用
  • 留言与评论(共有 条评论)
       
    验证码: