java kafka单列模式生产者客户端
1、所需要的依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>kafkaCli</groupId>
<artifactId>kafkaCli</artifactId>
<version>1.0-SNAPSHOT</version> <build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<!--这部分可有可无,加上的话则直接生成可运行jar包-->
<!--<archive>-->
<!--<manifest>-->
<!--<mainClass>${exec.mainClass}</mainClass>-->
<!--</manifest>-->
<!--</archive>-->
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.0.2</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
<encoding>GBK</encoding>
</configuration>
</plugin> </plugins> </build> <dependencies>
<!-- webSocket所需依赖 -->
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
</dependency>
<!-- kafka 所需依赖 -->
<!-- https://mvnrepository.com/artifact/org.apache.kafka/kafka -->
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_2.12</artifactId>
<version>2.1.1</version>
</dependency> <dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>RELEASE</version>
</dependency>
</dependencies>
</project>
2、生产者代码
package com.kafka.producer; import com.kafka.systemConfig.SystemConfig;
import org.apache.kafka.clients.producer.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Properties; public class ProducerKafka {
private static final Logger log = LoggerFactory.getLogger(ProducerKafka.class);
public static Producer<String, String> procuder; {
Properties props = new Properties();
props.put("bootstrap.servers", SystemConfig.getProperty("bootstrap.servers","10.12.1.229:9092"));
props.put("acks", SystemConfig.getProperty("acks","all"));
props.put("retries", SystemConfig.getProperty("retries","0"));
props.put("batch.size", SystemConfig.getProperty("batch.size","16384"));
props.put("linger.ms",SystemConfig.getProperty("linger.ms","1"));
props.put("buffer.memory", SystemConfig.getProperty("buffer.memory","33554432"));
props.put("key.serializer", SystemConfig.getProperty("key.serializer", "org.apache.kafka.common.serialization.StringSerializer"));
props.put("value.serializer", SystemConfig.getProperty("value.serializer", "org.apache.kafka.common.serialization.StringSerializer"));
procuder = new KafkaProducer<String,String>(props);
} /**
* 向kafka发送消息
* @param message
* @return
*/
public void sendMessgae(ProducerRecord message) throws Exception{
procuder.send(message, new Callback() {
@Override
public void onCompletion(RecordMetadata recordMetadata, Exception e) {
log.info("向kafka发送数据返回偏移量: {}" , recordMetadata.offset());
}
});
} /**
* 向kafka发送消息
* @param topic 主题
* @param value 值
* @throws Exception
*/
public void sendMessgae(String topic, String value) throws Exception{
sendMessgae(new ProducerRecord<String, String>(topic, value));
} /**
* 向kafka发送消息
* @param topic 主题
* @param value 值
* @throws Exception
*/
public void sendMessgae(String topic,String key, String value) throws Exception{
sendMessgae(new ProducerRecord(topic, key, value));
}
/**
* 刷新缓存
*/
public void flush() {
procuder.flush();
} /**
* 关闭连接
*/
public void close() {
procuder.close();
} /**
* 单例模式确保全局中只有一份该实例
*/
private static class ProducerKafkaHolder{
private static ProducerKafka instance = new ProducerKafka();
} /**
* 延迟加载,避免启动加载
* @return
*/
public static ProducerKafka getInstance(){
return ProducerKafkaHolder.instance;
} public static void main(String []args){ try {
ProducerKafka producerKafka = ProducerKafka.getInstance();
producerKafka.sendMessgae("TEST_JAVA","key","value");
producerKafka.flush();
producerKafka.close();
} catch (Exception e) {
e.printStackTrace();
} } }
3、配置项代码
package com.kafka.systemConfig; import java.io.IOException;
import java.io.InputStream;
import java.util.Properties; public class SystemConfig {
private static Properties properties = null;
// private final static String FILE_PATH = System.getProperty("user.dir") + "/conf/kafkaProducer.properties";
private final static String FILE_PATH = "kafkaProducer.properties"; private SystemConfig() {
System.out.println("FILE_PATH" + FILE_PATH);
properties = getConfig();
} /**
* Get property value.
*
* @param name
* property name.
* @return the value.
*/
public static String getProperty(String name) {
return getProperty(name, null);
} /**
* Get property value.
*
* @param name
* property name.
* @param defaultValue
* value if property not found.
* @return the value.
*/
public static String getProperty(String name, String defaultValue) {
String ret = null;
if (properties == null) {
properties = getConfig();
}
if (properties != null) {
ret = properties.getProperty(name);
if (ret != null) {
try {
ret = new String(ret.getBytes("ISO-8859-1"), "GBK");
} catch (Exception e) {
e.printStackTrace();
}
return ret.trim();
} else{
return defaultValue;
} }
return defaultValue;
} /**
* @param name
* @param defaultValue
* @return
*/
public static int getIntProperty(String name, int defaultValue) {
int res = Integer.parseInt(getProperty(name, defaultValue + ""));
return res == 0 ? defaultValue : res;
} private static Properties getConfig() {
if (properties == null) {
properties = new Properties();
InputStream is = null;
try {
is = SystemConfig.class.getClassLoader()
.getResourceAsStream(FILE_PATH );
properties.load(is);
} catch (IOException e) {
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
}
}
}
}
return properties;
} public static void main(String args[]){
// System.out.println(SystemConfig.getProperty("bootstrap.servers"));
// System.out.println(FILE_PATH);
System.out.println(SystemConfig.class.getClassLoader().getResourceAsStream(FILE_PATH )); ;
}
}
3、webSocket代码
package com.kafka.wbSocket; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.concurrent.CopyOnWriteArraySet;
/**
* 用于 webSocket 应用相关
*
**/
@ServerEndpoint("/webSocket")
public class WebSocket {
private static final Logger log = LoggerFactory.getLogger(WebSocket.class);
private Session session;
public static CopyOnWriteArraySet<WebSocket> wbSockets = new CopyOnWriteArraySet<WebSocket>(); /**
* 建立连接。
* 建立连接时入参为session
*/
@OnOpen
public void onOpen(Session session){
this.session = session;
wbSockets.add(this);
log.info("New session insert,sessionId is "+ session.getId());
}
/**
* 关闭连接
*/
@OnClose
public void onClose(){
wbSockets.remove(this);
log.info("A session insert,sessionId is "+ session.getId());
}
/**
* 接收数据。
*
*/
@OnMessage
public void onMessage(String message ,Session session){
log.info(message + "from " + session.getId());
} /**
* 发送数据
* @param message
* @throws IOException
*/
public void sendMessage(String message) throws IOException {
this.session.getBasicRemote().sendText(message);
}
}
因平台jdk只支持1.6 、kafka所需版本为1.8 顾此消息中间件展示被忽略
java kafka单列模式生产者客户端的更多相关文章
- java设计模式--单列模式
java设计模式--单列模式 单列模式定义:确保一个类只有一个实例,并提供一个全局访问点. 下面是几种实现单列模式的Demo,每个Demo都有自己的优缺点: Demo1: /** * 单列模式需要满足 ...
- ActiveMQ学习系列(二)----生产者客户端(java)
上文主要简单地将activeMq搭建了起来,并且可以用web console去登录查看相关的后台功能. 本文将学习如何用java语言实现一个生产者客户端,主要参考了以下链接: http://activ ...
- Kafka技术内幕 读书笔记之(二) 生产者——新生产者客户端
消息系统通常由生产者(producer ). 消费者( consumer )和消息代理( broker ) 三大部分组成,生产者会将消息写入消息代理,消费者会从消息代理中读取消息 . 对于消息代理而言 ...
- kafka生产者客户端
kafka的生产者 1. 生产者客户端开发 熟悉kafka的朋友都应该知道kafka客户端有新旧版本,老版本采用scala编写,新版本采用java编写.随着kafka版本的升级,旧版本客户端已经快 ...
- 在JAVA和android中常用的单列模式
在很多开发中,项目为了节约资源,都把一个类的构造函数变为私有化,这样整个项目中就不能创建多个实例,这样的方法我们称为单例模式 现在通过代码来简介下这个单例模式: 在新建一个java项目后,创建一个实体 ...
- java基础语法(二)--单列模式
java基础语法(二)--单列模式 /** * 功能:单列模式 * @author Administrator * */ public class SingletonTest { public sta ...
- java基础(三):反射、反序列化破解单列模式和解决方式
单例模式指的是一个类只有一个对象,通过一些措施达到达到这个目的.但是反射和反序列化可以获得多个不同的对象. 先简单的认识一下单例模式 一:单例模式 通过私有构造器,声明一个该类的静态对象成员,提供一个 ...
- 2.5多线程(Java学习笔记)生产者消费者模式
一.什么是生产者消费者模式 生产者生产数据存放在缓冲区,消费者从缓冲区拿出数据处理. 可能大家会问这样有何好处? 1.解耦 由于有了缓冲区,生产者和消费者之间不直接依赖,耦合度降低,便于程序拓展和维护 ...
- kafka producer 生产者客户端参数配置
在生产者向broker发送消息时,需要配置不同的参数来确保发送成功. acks = all #指定分区中有多少副本必须收到这条消息,生产者才认为这条消息发送成功 acks = 0 #生产者发送消息之后 ...
随机推荐
- 【资料】Mac OS X 10.9虚拟机镜像及tools
原文链接 http://bbs.itheima.com/thread-141793-1-1.html 1.首先解压文件,两个同时选中,右键进行解压. 2.打开虚拟机VMware workstation ...
- ThinkPhp框架对“数据库”的基本操作
框架有时会用到数据库的内容,在"ThinkPhp框架知识"的那篇随笔中提到过,现在这篇随笔详细的描述下. 数据库的操作,无疑就是连接数据库,然后对数据库中的表进行各种查询,然后就是 ...
- Xcode常用的文件路径
1.Provisioning Profile文件在哪找? ~/Library/MobileDevice/Provisioning Profiles 2.master 在那找? ~/.cocoapods
- ButterKnife注解框架详解
Android 懒人注解框架 :https://github.com/JakeWharton/butterknife 前言: 注解,相信很多同学都用到了,对控件进行初始化的时候需要用到 findVie ...
- Last Day in Autodesk
今天是我的最后一天在Autodesk上海了,以后将不再折腾那么大的软件了,还是回到CG开发中捣鼓短小精悍的东西——我还将继续整理开源CG生产工具. Today is my last day in Au ...
- Testlink1.9.17使用方法(第一章 前言)
第一章 前言 QQ交流群:585499566 一.Testlink主要功能: 测试项目管理 测试需求管理 测试用例管理 测试计划的制定 测试用例对测试需求的覆盖管理 测试用例的执行 大量测试数据的度量 ...
- 算法:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
算法:用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型.<剑指offer> 利用栈来进行操作,代码注释写的比较清楚:首先判断两个栈是否是空的:其次当栈二 ...
- H264-YUV通过RTP接收视频流ffmpeg解码SDL实时播放
写在前面的话 写一个简单的播放器,通过RTP接收视频流,进行实时播放.最初,使用ffplay或者vlc接收按照SDP协议文件可以播放视频,但是视频中断后重启,不能正确的解包,时常会出现如下的错误信息. ...
- .NET Core 2.0
下载 Visual Studio 2017 version 15.3 下载 .NET Core 2.0 下载 Visual Studio for Mac 微软今天发布了.NET Core 2.0 版本 ...
- ajax请求经典格式
$.ajax({ url: url, type: "POST", dataType: "json", data: data, success: funtion1 ...