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. gulp解决跨域的配置文件

    //引入插件 var gulp = require('gulp'); // var Proxy = require('gulp-connect-proxy'); var connect = requi ...

  2. 2018-11-29 VS Code英汉词典插件v0.0.6-改为TS实现, 加测试

    如前文VS Code英汉词典插件v0.0.4-驼峰下划线命名打算, 首先将JS源码改为TypeScript实现, 并添加了必要的测试. 昨天得知vue.js 3.0会用TypeScript实现, 正好 ...

  3. 在centos7上编译安装nginx

    题前,先放一个有图有真相的博客链接:https://www.cnblogs.com/zhang-shijie/p/5294162.html 虽然别人说的很详细,但还是记录一下 1.VMWare Wor ...

  4. 30.Odoo产品分析 (四) – 工具板块(2) – 搜索和仪表盘(2)

    查看Odoo产品分析系列--目录 在前面的模块中,简单介绍过了odoo如何搜索系统中的各种数据集,并保存这些过滤器,以便在之后需要时能够轻松访问这些过滤器.这里将做更详细的介绍.最后分析仪表盘的功能, ...

  5. 小程序实践(三):九宫格实现及item跳转

    效果图: 实现效果图红色线包含部分的九宫格效果,并附带item点击时间. --------------------------------------------------------------- ...

  6. Android为TV端助力 转载:内存泄露与内存溢出的区别

    内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory:比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出. ...

  7. CSS布局---居中方法

    在web页面布局中居中是我们常遇到的情况,而居中分为水平居中与垂直居中 文本的居中 CSS中对文本的居中做的非常友好,我们是需要text-align, line-height 两个属性就可以控制文本的 ...

  8. linux tmp清理这些事

    tmp目录 首先看下FHS的定义. FHS(Filessystem Hierarchy Standard) 的重点在于规范每个特定的目录下应该要放置什么样子的数据. tmp约定的存放内容 /tmp 这 ...

  9. JSON基础知识点

    一.介绍: JSON是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成. 二.数据格式: 1.JSON建构于两种数据格式: “名称/值”对(键值对)的集合,不同的语言中,它被理解为 ...

  10. 智能POS删除文件和数据库操作步骤

    1. 2. 3. 4.winbox:日志:winboxcash:数据库:winboxcyb:其他文件: 5.删除以上三个文件夹