是什么

Pulsar 是一个用于服务器到服务器的消息系统,具有多租户、高性能等优势。详见

安装

本文主练习怎么用,本地搭建了一个单机版,无非就是wget、tar、start这些命令,详见

Java客户端

1.引入GAV

        <!-- https://mvnrepository.com/artifact/org.apache.pulsar/pulsar-client -->
<dependency>
<groupId>org.apache.pulsar</groupId>
<artifactId>pulsar-client</artifactId>
<version>2.8.0</version>
</dependency>

2.创建配置项

用于连接Pulsar等配置

  • Yml配置

    pulsar:
    url: 10.20.30.228:6650
    # url: 10.20.30.228:6650,10.20.30.228:6651 #集群配置
  • 新增配置类

    package com.project.pulsar.conf;
    
    import org.apache.pulsar.client.api.PulsarClient;
    import org.apache.pulsar.client.api.PulsarClientException;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration; @Configuration
    public class PulsarConf {
    @Value("${pulsar.url}")
    String url; @Bean
    public PulsarClient pulsarFactory(){
    PulsarClient client = null;
    try {
    client = PulsarClient.builder()
    .serviceUrl("pulsar://"+url)
    .build();
    } catch (PulsarClientException e) {
    }
    return client;
    }
    }

3.验证测试

​ 通过简单生产-消费测试配置是否正常

  • 创建BaseController

    注意,subscriptionName要保证唯一

    package com.project.pulsar.base;
    
    import com.project.pulsar.conf.PulsarConf;
    import org.apache.pulsar.client.api.*;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Bean;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController; import java.util.HashMap;
    import java.util.Map; @RestController
    public class BaseController {
    @Autowired
    PulsarConf pulsarConf; /**
    * 生产消息
    * @param msg
    * @throws PulsarClientException
    */
    @GetMapping("/base/sendMsg")
    public MessageId sendMsg(String msg) throws PulsarClientException {
    PulsarClient pulsarFactory = pulsarConf.pulsarFactory(); Producer<byte[]> producer1 = pulsarFactory.newProducer()
    .topic("my-topic") .create();
    // 然后你就可以发送消息到指定的broker 和topic上:
    return producer1.send(msg.getBytes());
    } /**
    * 手动执行获取消息
    * @throws PulsarClientException
    */
    @GetMapping("/base/comsumer")
    public void comsumerByArtificial() throws PulsarClientException {
    PulsarClient pulsarFactory = pulsarConf.pulsarFactory();
    Consumer<byte[]> consumer = pulsarFactory.newConsumer()
    .topic("my-topic")
    .subscriptionName("my-subscription")
    .subscribe();
    Message<byte[]> receive = consumer.receive();
    System.out.println(new String(receive.getData()));
    consumer.acknowledge(receive);//确认消息被消费
    consumer.close();
    } /**
    * 自动监听消费消息
    * @throws PulsarClientException
    */
    @Bean
    public void comsumerByListener() throws PulsarClientException {
    MessageListener myMessageListener = (consumer, msg) -> {
    try {
    System.out.println("Message received: " + new String(msg.getData()));
    consumer.acknowledge(msg);
    } catch (Exception e) {
    consumer.negativeAcknowledge(msg);
    }
    };
    PulsarClient pulsarFactory = pulsarConf.pulsarFactory();
    pulsarFactory.newConsumer()
    .topic("my-topic")
    .subscriptionName("my-subscriptionByListener")
    .messageListener(myMessageListener)
    .subscribe();
    } }
  • 生产消息

    [127.0.0.1:9999/base/sendMsg?msg=Hello RB](http://127.0.0.1:9999/base/sendMsg?msg=Hello RB)

  • 消费消息

    • 在生产后,如果采用监听模式,会自动消费
    • 在生产后,如果采用手动模式,执行127.0.0.1:9999/base/comsumer会被消费,如队列中无消费,则会阻塞等待

其他及代码下载

  • topic不用显式创建,当消息发送或消费者建立连接时,如未创建会自动创建
  • 代码见此Base包下

1.java连接pulsar服务的更多相关文章

  1. Java连接MQTT服务-wss方式

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...

  2. Java连接MQTT服务-ws方式

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...

  3. Java连接MQTT服务-tcp方式

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...

  4. Java 连接 Memcached 服务

    原文:http://www.runoob.com/memcached/java-memcached.html mac下安装和配置Memcached:http://www.pchou.info/open ...

  5. Memcached常用语法与java连接服务

    memcached常用语法及java使用方式 Author:SimpleWu Memcached 存储命令 Memcached set 命令用于将 value(数据值) 存储在指定的 key(键) 中 ...

  6. Java连接池详解

    于共享资源,有一个很著名的设计模式:资源池(Resource Pool).该模式正是为了解决资源的频繁分配﹑释放所造成的问题.为解决我们的问题,可以采用数据库连接池技术.数据库连接池的基本思想就是为数 ...

  7. PHP学习笔记——PHP脚本和JAVA连接mysql数据库

    环境 开发包:appserv-win32-2.5.10 服务器:Apache2.2 数据库:phpMyAdmin 语言:php5,java 平台:windows 10 java驱动:mysql-con ...

  8. java 微信公众服务平台 下发 模板消息

    java 微信公众服务平台 下发 模板消息 (一).部分截图 (二).部分代码 (一).部分截图: (二).部分代码: //此处 给用户微信发消息... Map<String,String> ...

  9. 【JDBC】Java 连接 MySQL 基本过程以及封装数据库工具类

    一. 常用的JDBC API 1. DriverManager类 : 数据库管理类,用于管理一组JDBC驱动程序的基本服务.应用程序和数据库之间可以通过此类建立连接.常用的静态方法如下 static ...

随机推荐

  1. 火爆的文字游戏你玩了吗?「GitHub 热点速览 v.22.06」

    不知道你有没有被 Wordle 这款游戏刷屏,在本期热点速览的特推部分选了一个 React 编写的开源版本同你分享,而本次公众号摘要也是一个提示, 只不过这个只能盲猜了.别小瞧 Wordle 这个游戏 ...

  2. ApacheJemeter的简单使用

    前言:最近由于工作需要进行接口测试,故简单复习一下ApacheJemeter的使用 安装包下载地址: 链接:https://pan.baidu.com/s/11ywNWRUkFNNBCWw4HiO6B ...

  3. 【HTML】table表格拆分合并(colspan、rowspan)

    代码演示 横向合并: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http:// ...

  4. start方式开启服务的特点&bindService 方式开启服务的特点

      服务是在后台运行 可以理解成是没有界面的activity   定义四大组件的方式都是一样的     定义一个类继承Service     start方式开启服务的特点   特点:   (1)服务通 ...

  5. 修改注册表使win server 2012R2开机进入桌面而不是开始界面

    首先,使用WIN+R快捷键打开运行命令,使用命令打开注册表编辑器 然后,进入注册表之后,我们一次定位到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\ ...

  6. TestNG--@Factory

    原文地址:http://blog.csdn.net/wanghantong TestNg的@Factory注解从字面意思上来讲就是采用工厂的方法来创建测试数据并配合完成测试 其主要应对的场景是:对于某 ...

  7. 关于setInterval方法中function的定义方法

    使用window对象的setInterval方法,作为第一个参数传递的function必须在全局作用域中定义,否则会出现报错而无法执行. 具体如下: 在下面的代码中,试用jQuery方式在回调函数中使 ...

  8. Jest_JavaScript测试框架

    Jest是一个JavaScript测试框架,由Facebook用来测试所有JavaScript代码,包括React应用程序. 不同级别的自动化测试:单元.集成.组件和功能. 单元测试可以看作是和在组件 ...

  9. Solution -「CERC 2016」「洛谷 P3684」机棚障碍

    \(\mathcal{Description}\)   Link.   给一个 \(n\times n\) 的网格图,每个点是空格或障碍.\(q\) 次询问,每次给定两个坐标 \((r_1,c_1), ...

  10. 用 JuiceFS 备份 Nginx 日志可以这么简单

    在我们线上的生产环境中要备份的东西很多,各种服务日志.数据库数据.用户上传数据.代码等等.用 JuiceFS 来备份可以节省你大量时间,我们会围绕这个主题写一系列的教程,整理出一套最佳实践,方便大家. ...