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单列模式生产者客户端的更多相关文章

  1. java设计模式--单列模式

    java设计模式--单列模式 单列模式定义:确保一个类只有一个实例,并提供一个全局访问点. 下面是几种实现单列模式的Demo,每个Demo都有自己的优缺点: Demo1: /** * 单列模式需要满足 ...

  2. ActiveMQ学习系列(二)----生产者客户端(java)

    上文主要简单地将activeMq搭建了起来,并且可以用web console去登录查看相关的后台功能. 本文将学习如何用java语言实现一个生产者客户端,主要参考了以下链接: http://activ ...

  3. Kafka技术内幕 读书笔记之(二) 生产者——新生产者客户端

    消息系统通常由生产者(producer ). 消费者( consumer )和消息代理( broker ) 三大部分组成,生产者会将消息写入消息代理,消费者会从消息代理中读取消息 . 对于消息代理而言 ...

  4. kafka生产者客户端

    kafka的生产者 1. 生产者客户端开发 ​ 熟悉kafka的朋友都应该知道kafka客户端有新旧版本,老版本采用scala编写,新版本采用java编写.随着kafka版本的升级,旧版本客户端已经快 ...

  5. 在JAVA和android中常用的单列模式

    在很多开发中,项目为了节约资源,都把一个类的构造函数变为私有化,这样整个项目中就不能创建多个实例,这样的方法我们称为单例模式 现在通过代码来简介下这个单例模式: 在新建一个java项目后,创建一个实体 ...

  6. java基础语法(二)--单列模式

    java基础语法(二)--单列模式 /** * 功能:单列模式 * @author Administrator * */ public class SingletonTest { public sta ...

  7. java基础(三):反射、反序列化破解单列模式和解决方式

    单例模式指的是一个类只有一个对象,通过一些措施达到达到这个目的.但是反射和反序列化可以获得多个不同的对象. 先简单的认识一下单例模式 一:单例模式 通过私有构造器,声明一个该类的静态对象成员,提供一个 ...

  8. 2.5多线程(Java学习笔记)生产者消费者模式

    一.什么是生产者消费者模式 生产者生产数据存放在缓冲区,消费者从缓冲区拿出数据处理. 可能大家会问这样有何好处? 1.解耦 由于有了缓冲区,生产者和消费者之间不直接依赖,耦合度降低,便于程序拓展和维护 ...

  9. kafka producer 生产者客户端参数配置

    在生产者向broker发送消息时,需要配置不同的参数来确保发送成功. acks = all #指定分区中有多少副本必须收到这条消息,生产者才认为这条消息发送成功 acks = 0 #生产者发送消息之后 ...

随机推荐

  1. thinkphp模板中,checkbox回显问题

    thinkphp 模板里面可以这样写包含操作 //in 标签 <in name="变量名" value="值1,值2,...">要输出的内容< ...

  2. NDK时间测量

    在NDK中测量时间,有四种方法. LINUX系统方法 gettimeofday 以秒和微秒的形式返回自从Epoch(1970-01-01 00:00:00 +0000 (UTC))时间以来,系统已经经 ...

  3. chrome离线包出现的小问题

    网友使用离线包时出现的一些小问题,在此做个记录: 1. @200258 这个版本就是个坑.chrome低版本显示空白,高版本界面乱掉,有反馈出54可以,有说56可以 亲测:即使不用离线包直接FQ,也会 ...

  4. Android滑动冲突解决

    (1).场景一:外部滑动方向跟内部滑动方向不一致,比如外部左右滑动,内部上下滑动   ViewPager+Fragment配合使用,会有滑动冲突,但是ViewPager内部处理了这种滑动冲突   如果 ...

  5. 电脑端支付宝支付 -前端获取支付宝返回的form 以及submit 调用支付扫码页面

    前端调取支付宝支付接口(后台进行封装,没有直接调取支付宝接口),调用返回的数据中,将会有一串的form表单数据返回,我们需要将此表单在当前调用页面submit下,以跳转到支付扫码页: 支付宝返回的fo ...

  6. (后端)安装mongodb以及设置为windows服务 详细步骤(转)

    1.在data文件夹下新建一个log文件夹,用于存放日志文件,在log文件夹下新建文件mongodb.log 2.在 D:\mongodb文件夹下新建文件mongo.config,并用记事本打开mon ...

  7. android 可以精确到秒级的时间选择器

    android自带的时间选择器只能精确到分,但是对于某些应用要求选择的时间精确到秒级,此时只有自定义去实现这样的时间选择器了.下面介绍一个可以精确到秒级的时间选择器. 先上效果图: 下面是工程目录: ...

  8. mysql之连接查询、联合查询、子查询

    本文内容: 连接查询 联合查询 子查询 from子查询 where子查询 exists子查询 首发日期:2018-04-11 连接查询: 连接查询就是将多个表联合起来查询,连接查询方式有内连接.外连接 ...

  9. HDU 1086

    You can Solve a Geometry Problem too Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/3 ...

  10. [20181007]12cR2 Using SQL Patch.txt

    [20181007]12cR2 Using SQL Patch.txt --//12cR2 已经把sql打补丁集成进入dbms_sqldiag,不是11g的 DBMS_SQLDIAG_INTERNAL ...