pulsar Schema 案例

Pulsar Schema

Pulsar 对于特定结构的数据可以在构造生产者的时候构建schema

Schema 实例

假设一条消息是如下的格式,[name,address,age]

创建Schema


public class userReading {
    public String name;
    public  String address;
    public int age;



    public userReading(String name, String address, int age) {
        this.name = name;
        this.address = address;
        this.age = age;
    }
    public userReading() {
    }

    public String getName() {
        return name;
    }

    public String getAddress() {
        return address;
    }

    public int getAge() {
        return age;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "userReading{" +
                "name='" + name + '\'' +
                ", address='" + address + '\'' +
                ", age=" + age +
                '}';
    }
}

创建client

private static PulsarClient mkClient(String URL) {
        try {
            PulsarClient client = PulsarClient.builder()
                    .serviceUrl(URL)
                    .build();
            return client;
        } catch (PulsarClientException e) {
            e.printStackTrace();
        }
        return null;
    }

创建 指定Schema 的生产者

        Producer<userReading> producer = client.newProducer(JSONSchema.of(userReading.class))
                .topic("user-readings")
                .create();

生产消费者完整案例

Schema
package Schema_test;

public class userReading {
    public String name;
    public  String address;
    public int age;



    public userReading(String name, String address, int age) {
        this.name = name;
        this.address = address;
        this.age = age;
    }
    public userReading() {
    }

    public String getName() {
        return name;
    }

    public String getAddress() {
        return address;
    }

    public int getAge() {
        return age;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "userReading{" +
                "name='" + name + '\'' +
                ", address='" + address + '\'' +
                ", age=" + age +
                '}';
    }
}

schemaExample_send
package Schema_test;


import org.apache.pulsar.client.api.Producer;
import org.apache.pulsar.client.api.PulsarClient;
import org.apache.pulsar.client.api.PulsarClientException;
import org.apache.pulsar.client.api.Schema;
import org.apache.pulsar.client.impl.schema.JSONSchema;

import java.util.Scanner;

public class schemaExample_send {



    public static void main(String[] args) throws PulsarClientException {
        String Pulsar_URL="pulsar://localhost:6650";
        PulsarClient client = mkClient(Pulsar_URL);
        send(client);

    }
    private static void send(PulsarClient client) throws PulsarClientException {
        Producer<userReading> producer = client.newProducer(JSONSchema.of(userReading.class))
                .topic("user-readings")
                .create();
        for (int i=0;i<100;i++) {

            userReading user=new userReading(("thc"+i),("广州"+i),i);
            producer.send(user);
            System.out.println("消息已发送: "+ user.toString());
        }

    }
    private static PulsarClient mkClient(String URL) {
        try {
            PulsarClient client = PulsarClient.builder()
                    .serviceUrl(URL)
                    .build();
            return client;
        } catch (PulsarClientException e) {
            e.printStackTrace();
        }
        return null;
    }

}

SchemaExample_receive
package Schema_test;

import org.apache.pulsar.client.api.Consumer;
import org.apache.pulsar.client.api.Message;
import org.apache.pulsar.client.api.PulsarClient;
import org.apache.pulsar.client.api.PulsarClientException;

public class SchemaExample_receive {
    public static void main(String[] args) throws PulsarClientException {
        String Pulsar_URL="pulsar://localhost:6650";
        PulsarClient client=mkClient(Pulsar_URL);
        receive(client);

    }
    private static PulsarClient mkClient(String URL) {
        try {
            PulsarClient client = PulsarClient.builder()
                    .serviceUrl(URL)
                    .build();
            return client;
        } catch (PulsarClientException e) {
            e.printStackTrace();
        }
        return null;
    }

    private static void receive (PulsarClient client)  throws PulsarClientException {
        Consumer consumer = null;

        consumer = client.newConsumer(JSONSchema.of(userReading.class))
                .topic("user-readings")
                .subscriptionName("my-subscription")
                .subscribe();

        while (true){
            Message msg= null;

            try {

                msg = consumer.receive();
                System.out.println("Message received: " +new String(msg.getData()));
                //确认消息,以便删除已经接受的消息
                consumer.acknowledge(msg);
            } catch (PulsarClientException e) {
                //消息处理失败,请稍后重新传递
                consumer.negativeAcknowledge(msg);
            }



        }
    }
}

结果截图

send
在这里插入图片描述
receive
在这里插入图片描述

如果在不指定schema 的情况下构造生产者,则生产者只能生成类型为byte[]的消息

Producer<byte[]> producer = client.newProducer()
        .topic(topic)
        .create();

以下常用schema格式

bytes

不指定Schema或 字节数组Schema :

Producer<byte[]> bytesProducer = client.newProducer(Schema.BYTES)
      .topic("some-raw-bytes-topic")
      .create();
  或者
Producer<byte[]> bytesProducer = client.newProducer()
      .topic("some-raw-bytes-topic")
      .create();      
String

UTF-8编码的String 字符串

Producer<String> stringProducer = client.newProducer(Schema.STRING)
      .topic("some-string-topic")
      .create();
JSON
Producer<MyPojo> pojoProducer = client.newProducer(Schema.JSON(MyPojo.class))
      .topic("some-pojo-topic")
      .create();
PROTOBUF
Producer<MyProtobuf> protobufProducer = client.newProducer(Schema.PROTOBUF(MyProtobuf.class))
      .topic("some-protobuf-topic")
      .create();
AVRO
Producer<MyAvro> avroProducer = client.newProducer(Schema.AVRO(MyAvro.class))
      .topic("some-avro-topic")
      .create();
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值