Pulsar安裝及消息收發示例

Pulsar簡介

Apache Pulsar is an open-source distributed pub-sub messaging system originally created at Yahoo and now part of the Apache Software Foundation.

官網

Pulsar官網可以下載相關軟件包,並且有詳細的API文檔及demo,地址: Pulsar

下載安裝

  • 下載Pulsar二進制包
    Pulsar下載
  • 使用tar -zxvf解壓下載的資源包,目錄結構如下
    目錄結構
  • 進入bin目錄
    bin目錄
  • 本地單點運行,使用命令./pulsar standalone 即可,這裏使用默認配置,暴露端口爲6650

client消息發送接收DEMO

Java源碼地址: GitHub

引入maven依賴
    <properties>
        <pulsar-client-version>2.3.2</pulsar-client-version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.apache.pulsar</groupId>
            <artifactId>pulsar-client</artifactId>
            <version>${pulsar-client-version}</version>
        </dependency>
    </dependencies>
PulsarClient初始化配置
package com.dongyang.study.pulsar.base;

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

/**
 * pulsar base client
 *
 * @author dongyang.hu
 * @date 2019/6/5 16:31
 */
public class PulsarClientBuilder {

    private static PulsarClient client;

    private static final String PULSAR_SERVER_URL = "pulsar://localhost:6650";

    private PulsarClientBuilder() {
    }

    public static PulsarClient getInstance() {
        if (client == null) {
            try {
                client = PulsarClient.builder().serviceUrl(PULSAR_SERVER_URL).build();
            } catch (PulsarClientException e) {
                e.printStackTrace();
            }
        }
        return client;
    }

    public enum Topic {

        /**
         * 測試
         */
        DEMO("demo-topic"),
        ;

        private String name;

        Topic(String name) {
            this.name = name;
        }

        public String getName() {
            return name;
        }
    }

    public enum Subscription {

        /**
         * 測試
         */
        DEMO("demo-subscription"),
        ;

        private String name;

        Subscription(String name) {
            this.name = name;
        }

        public String getName() {
            return name;
        }
    }
}
Producer進行消息發送
package com.dongyang.study.pulsar.producer;

import com.dongyang.study.pulsar.base.PulsarClientBuilder;
import org.apache.pulsar.client.api.*;

import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

/**
 * send massage
 *
 * @author dongyang.hu
 * @date 2019/6/5 16:14
 */
public class SendMessage {

    private static final String MESSAGE_TEMPLATE = "pulsar-message-%s";

    public static void send() {
        Executors.newFixedThreadPool(1).execute(() -> {
            int sendTimes = 0;
            try {
                PulsarClient client = PulsarClientBuilder.getInstance();
                Producer<String> producer = client.newProducer(Schema.STRING)
                        .topic(PulsarClientBuilder.Topic.DEMO.getName())
                        .batchingMaxPublishDelay(10, TimeUnit.MILLISECONDS)
                        .sendTimeout(10, TimeUnit.SECONDS)
                        .blockIfQueueFull(true).create();
                while (true) {
                    String message = String.format(MESSAGE_TEMPLATE, ++sendTimes);
                    System.out.println("send message: " + message);
                    producer.send(message);
                    Thread.sleep(1000);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        });
    }
}
Consumer接收消息
package com.dongyang.study.pulsar.consumer;

import com.dongyang.study.pulsar.base.PulsarClientBuilder;
import org.apache.pulsar.client.api.*;

import java.util.concurrent.Executors;

/**
 * receive message
 *
 * @author dongyang.hu
 * @date 2019/6/5 17:09
 */
public class ReceiveMessage {

    public static void receive() {
        Executors.newFixedThreadPool(1).execute(() -> {
            try {
                PulsarClient client = PulsarClientBuilder.getInstance();
                Consumer consumer = client.newConsumer(Schema.STRING)
                        .topic(PulsarClientBuilder.Topic.DEMO.getName())
                        .subscriptionName(PulsarClientBuilder.Subscription.DEMO.getName()).subscribe();
                while (true) {
                    Message message = consumer.receive();
                    System.out.println("receive message: " + message.getValue());
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        });
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章