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
二進制包
- 使用
tar -zxvf
解壓下載的資源包,目錄結構如下
- 進入
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();
}
});
}
}