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. angular 时间戳转换(星期过滤器)

    {{(value.time+'000' | date:'yyyy-MM-dd HH:mm:ss') : '/'}} .filter('getWeek', function() { return fun ...

  2. CSS3布局之box-flex的使用

    语法: box-flex:<number> 其中number取值:使用浮点数指定对象所分配其父元素剩余空间的比例.设置或检索伸缩盒对象的子元素如何分配其剩余空间.(伸缩盒最老版本) htm ...

  3. HDU 3032 Nim or not Nim?(Multi-Nim)

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...

  4. 洛谷P4926 [1007]倍杀测量者(差分约束)

    题意 题目链接 Sol 题目中的两个限制条件相当于是 \[A_i \geqslant (K_i - T)B_i\] \[A_i(K_i + T) \geq B_i\] 我们需要让这两个至少有一个不满足 ...

  5. 简单的Array.sort 排序方法

    [排序]sort类    Arrays.sort升序排序 import java.util.Arrays;//导入Arrays类public class menu{ public static voi ...

  6. SSL与TLS 区别 以及介绍

    SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层.SSL通过互相认证.使用数字签名确保完整性.使用加密确保私密性,以实现客户 ...

  7. WPF:解决DataGrid横向滚动条无法显示的问题

    DataGrid的最后一列的宽度设置为“Width=”auto””即可. 如果显示指定长度或者设置为“*”,那么不管怎么拖动列头,或者不管行里面的内容有没有超过DataGrid的显示区域,DataGr ...

  8. Android--手势及触摸事件的注意点(一)

    实现onInterceptTouchEvent方法可以用来拦截父ViewGroup传递下来的所有触屏事件,可以将所有触屏事件交由此ViewGroup自身的onTouchEvent来处理,也可以继续传递 ...

  9. JHipster开发环境安装

    本文演示如何在CentOS7上安装Jhipster以及其依赖组件. 这里采用官方推荐的Yarn安装方法,操作系统版本为CentOS 7.4. 1 安装JDK 推荐版本:OpenJDK 1.8.0-64 ...

  10. 查看Windows服务器安装了那些SQL Server组件

    如何查看Windows服务器安装了那些SQL Server组件呢? 最近就遇到这样一个需求,需要知道Windows服务器是否安装了Replication组件,那么有几种方法查看Windows服务器安装 ...