精华内容
下载资源
问答
  • kafka使用的java例子demo

    千次阅读 2019-06-03 16:22:08
    kafka使用的java例子demo前提代码maven消费者生产者运行 前提 zookeeper和kafka的win10下单机伪集群请参考: https://blog.csdn.net/sndayYU/article/details/90718238 ...代码 maven <depend...

    kafka使用的java例子demo

    前提

    zookeeper和kafka的win10下单机伪集群请参考:
    https://blog.csdn.net/sndayYU/article/details/90718238
    https://blog.csdn.net/sndayYU/article/details/90718786

    代码

    maven

    <dependency>
       <groupId>org.apache.kafka</groupId>
         <artifactId>kafka-clients</artifactId>
         <version>2.2.0</version>
     </dependency>
    

    消费者

    KfkConsumer.java

    package com.ydfind.kafka.simple;
    
    import org.apache.kafka.clients.consumer.Consumer;
    import org.apache.kafka.clients.consumer.ConsumerRecord;
    import org.apache.kafka.clients.consumer.ConsumerRecords;
    import org.apache.kafka.clients.consumer.KafkaConsumer;
    
    import java.util.Arrays;
    import java.util.Properties;
    
    public class KfkConsumer {
    
       public static void main(String[] args) {
           String topic = "test-topic";
    
           Properties props = new Properties();
           props.put("bootstrap.servers", "localhost:9092,localhost:9093,localhost:9094");
           props.put("group.id", "testGroup1");
           props.put("enable.auto.commit", "true");
           props.put("auto.commit.interval.ms", "1000");
           props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
           props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
           Consumer<String, String> consumer = new KafkaConsumer(props);
           consumer.subscribe(Arrays.asList(topic));
           while (true) {
               ConsumerRecords<String, String> records = consumer.poll(100);
               for (ConsumerRecord<String, String> record : records) {
                   System.out.printf("partition = %d, offset = %d, key = %s, value = %s%n", record.partition(), record.offset(), record.key(), record.value());
               }
           }
       }
    }
    

    生产者

    KfkProducer.java

    package com.ydfind.kafka.simple;
    
    import org.apache.kafka.clients.producer.Producer;
    import org.apache.kafka.clients.producer.ProducerRecord;
    
    import java.util.HashMap;
    import java.util.Map;
    
    public class KfkProducer {
       public static void main(String[] args) {
           Map<String, Object> props = new HashMap<String, Object>();
           props.put("bootstrap.servers", "localhost:9092,localhost:9093,localhost:9094");
           props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
           props.put("value.serializer","org.apache.kafka.common.serialization.StringSerializer");
           String topic = "test-topic";
           Producer<String, String> producer = new org.apache.kafka.clients.producer.KafkaProducer<String, String>(props);
           producer.send(new ProducerRecord(topic, "idea-key2", "java-message 1"));
           producer.send(new ProducerRecord(topic, "idea-key2", "java-message 2"));
           producer.send(new ProducerRecord(topic, "idea-key2", "java-message 3"));
    
           producer.close();
       }
    }
    

    运行

    1.启动zookeeper集群;
    2.启动kafka集群;
    3.运行消费者;
    4.运行生产者;

    结果可以看到消费者输出了生产者发过来的消息:
    在这里插入图片描述

    展开全文
  • ZooKeeper官方Java例子解读

    千次阅读 多人点赞 2018-10-22 22:55:15
    ZooKeeper官方提供了一个Java监听的例子,本文是我对该例子的学习笔记。可以做为帮助理解此例子的资料: 文档原文连接:http://zookeeper.apache.org/doc/current/javaExample.html#sc_completeSourceCode 翻译...

    ZooKeeper官方提供了一个Java监听的例子,本文是我对该例子的学习笔记。可以做为帮助理解此例子的资料:

    文档原文连接:http://zookeeper.apache.org/doc/current/javaExample.html#sc_completeSourceCode

    翻译连接:https://blog.csdn.net/liyiming2017/article/details/83275882

     

    需求理解

    我们先回顾一下例子的需求,此客户端有如下四个需求:

    1、它接收如下参数:

    • ZooKeeper服务的地址
    • 被监控的znode的名称
    • 可执行命令参数

    2、它会取得znode上关联的数据,然后执行命令

    3、如果znode变化,客户端重新拉取数据,再次执行命令

    4、如果znode消失了,客户端杀掉进行的执行命令

    如果你已经学习过或者了解过该例子文档的内容,你应该知道该程序做的事情就是接受用户输入的系统命令,然后监控zookeeper的znode,一旦znode存在,或者发生了变化,程序会把znode最新的数据存入文件,然后起一个线程执行用户的命令,同时还会起两个线程输出执行结果及日志。

     

    举例类比

    为了帮助理解,这里举个现实的例子--警察抓坏人:

    公安成立了一个行动组准备在嫌疑人住所进行抓捕,警方人员安排如下:

    1. 组长A负责总指挥
    2. 警察B负责监控嫌疑人,并与组长A联络
    3. 警察C,D,E,F埋伏在嫌疑人住所前后左右,准备实施抓捕

    整个抓捕过程是这样的:

    1. 组长A下达命令安排后,B,C各就各位(对象A做初始化工作)
    2. B开始监控嫌疑人,一旦嫌疑人进入警察布下的埋伏圈,则马上通知组长A(对象B为watcher,嫌疑人为被监听的znode。A注册为B的listener,在B的监听回调中被触发)
    3. 组长A得到通知后,马上命令C、D、E、F执行抓捕。(C,D,E是被A调用干活的线程)

    理解了上线的例子,我们继续对程序进行讲解。

     

    Executor和DataMonitor

    本例中有两个主要类,职能如下:

    Executor,它是程序的入口。负责初始化zookeeper、DataMonitor,把自己注册为DataMonitor的监听者,一旦DataMonitor监听到变化后,会通知它执行业务操作。

    他是例子中的组长A,它有几个内部类是前面说的警员C、D、E、F,负责干活。

    DataMonitor,他负责监控znode,发现znode变化后,通知listener执行业务逻辑,同时再次监控znode:

    他是例子中的警察B,负责监控犯人,并通知A。

    通过以上讲解,这两个主要类所负责的工作应该已经可以充分的理解了。接下来我们针对这两个类进入更为详细的讲解。

     

    内部类和接口:

    Executor:

            StreamWriter。继承Thread,以多线程的形式负责把执行的结果输出。相当于例子中的警察C、D、E、F

    DataMonitor:

            DataMonitorListener。DataMonitor一旦监控到znode的变化,立即调用自己持有的listener(实现此接口的对象)的exists方法(通知它的监听者)。

     

    继承关系:

    Executor:

    • 实现watcher:
      • 监听zookeeper连接的变化,实现process()方法,把事件传递给DataMonitor处理。 
    • 实现DataMonitor中定义的接口DataListener:
      • 实现exists()方法,处理znode变化的具体逻辑。
    • 实现runnable类:
      • run()方法中阻塞主线程,让程序转为事件驱动。
    public class Executor implements Watcher, Runnable, DataMonitor.DataMonitorListener{}

    DataMonitor:

     

    • 实现watcher:
      • 监听znode变化。实现process()方法,通过zk.exist()方法再次监听,再次设置自己为zookeeper.exist()的回调(实现不断监听,事件驱动)。同时数据返回后,立即进入下面的回调函数处理
    • 实现StatCallback:
      • 这是zookeeper.exist()操作回调对象。实现processResult()方法,调用DataMonitor持有的listener(也就是Excutor)的exists()方法执行逻辑。
    public class DataMonitor implements Watcher, StatCallback{} 

    引用关系:

    Executor:

    • DataMonitor dm;
    • ZooKeeper zk; //ZooKeeper的连接
    • Process child; //真正执行系统命令的子线程,相当于警察C,D,E,F之一。

    DataMonitor:

    • ZooKeeper zk; //和Executor是同一个引用。Executor通过构造函数传入
    • DataMonitorListener listener; //executor对象,Executor通过构造函数传入自己

     

    图解

    Executor和DataMonitor的关系如下:

    两者通过Executor作为主入口,初始化DataMonitor和ZooKeeper对象后,阻塞主线程。转为事件驱动。即通过DataMonitor监控znode上的事件来驱动程序逻辑。

    整个流程如下:

     

    1. Excutor把自己注册为DataMonitor的监听
    2. DataMonitor实现watcher接口,并监听znode
    3. znode变化时,触发DataMonitor的监听回调
    4. 回调中通过ZooKeeper.exist() 再次监听znode
    5. 上一步exist的回调方法中,调用监听自己的Executor,执行业务逻辑6
    6. Executor启新的线程执行命令
    7. Executor启新的线程打印执行命令的输出

     

    展开全文
  • Michael, 29 Andy, 30 Justin, 19
  • C调用java例子

    千次阅读 2018-04-14 22:30:19
    实验代码已打包,下载地址。实现原理:使用JNI提供的接口来...(通过JNI可以实现java调用C,也可以实现C调用java) HelloWorld.java:public class HelloWorld{ public static void main(String[] args){ Syste...

    实验代码已打包,下载地址

    实现原理:使用JNI提供的接口来反射得到Java方法,进行调用。jni.h在JDK里(jdk1.8.0_121/include/)。

    (通过JNI可以实现java调用C,也可以实现C调用java)

     HelloWorld.java:

    public class HelloWorld{
    	public static void main(String[] args){
    		System.out.println("Hello, World");
    	}
    	public static int square(int input){
    		int output = input * input;
    		return output;
    	}
    	public static int power(int input, int exponent){
    		int output,i;
    		output=1;
    		for(i=0;i<exponent;i++){
    			output *= input;
    		}
    		return output;
    	}
    }
    

    hello_world.c:

    #include<stdio.h>
    #include<jni.h>
    
    JNIEnv* create_vm(JavaVM **jvm)
    {
        JNIEnv* env;
        JavaVMInitArgs args;
        JavaVMOption options;
        args.version = JNI_VERSION_1_6;
        args.nOptions = 1;
        options.optionString ="-Djava.class.path=./";
        args.options = &options;
        args.ignoreUnrecognized = 0;
        int rv;
        rv = JNI_CreateJavaVM(jvm,(void**)&env, &args);
        if (rv < 0 || !env)
            printf("Unable to Launch JVM%d\n",rv);
        else
            printf("Launched JVM! :)\n");
        return env;
    }
    
     
    void invoke_class(JNIEnv* env)
    {
        jclass hello_world_class;
        jmethodID main_method;
        jmethodID square_method;
        jmethodID power_method;
        jint number=20;
        jint exponent=3;
        hello_world_class =(*env)->FindClass(env, "HelloWorld");
        main_method =(*env)->GetStaticMethodID(env, hello_world_class, "main","([Ljava/lang/String;)V");
        square_method =(*env)->GetStaticMethodID(env, hello_world_class, "square","(I)I");
        power_method =(*env)->GetStaticMethodID(env, hello_world_class, "power","(II)I");
        (*env)->CallStaticVoidMethod(env,hello_world_class, main_method, NULL);
        printf("%d squared is %d\n",number,
            (*env)->CallStaticIntMethod(env,hello_world_class, square_method, number));
        printf("%d raised to the %d power is%d\n", number, exponent,
            (*env)->CallStaticIntMethod(env,hello_world_class, power_method, number, exponent));
    }
    
    
    int main(int argc,char **argv)
    {
        JavaVM *jvm;
        JNIEnv *env;
        env = create_vm(&jvm);
        if(env == NULL)
            return 1;
        invoke_class(env);
        return 0;
    }

     # 编译java

    javac HelloWorld.java

     # 编译C

    gcc -D__int64="long long" -Ic:/java/jdk1.8.0_121/include/ -Ic:/java/jdk1.8.0_121/include/win32 -ohello_world hello_world.c -L c:/java/jdk1.8.0_121/jre/bin/server -ljvm

    要点

    a)     使用64位的JDK需要添加-D__int64="longlong"

    b)     通过-I参数指定jni.h、jni_md.h的路径。

    c)     通过-L指定jvm.dll的路径。

    这3个文件都在JDK文件夹里面,可以通过搜索找到具体的路径。

     

    #运行程序

    hello_world

    如果报找不到jvm.dll的错,把jvm.dll(路径:jdk1.8.0_121\jre\bin\server)注册到系统。

    具体如何注册参考这篇文章:https://jingyan.baidu.com/article/fb48e8be3212766e632e147f.html

     

    可以写Makefile一步到位,Makefile:

    all: run
     
    HelloWorld.class: HelloWorld.java
           javac HelloWorld.java
    
    hello_world: hello_world.c
           gcc -D__int64="long long" -Ic:/java/jdk1.8.0_121/include/-Ic:/java/jdk1.8.0_121/include/win32 -o hello_world hello_world.c -Lc:/java/jdk1.8.0_121/jre/bin/server -ljvm
    
    run: HelloWorld.class hello_world
           ./hello_world
    
    clean:
           rm -f HelloWorld.class hello_world

     编译和运行:

    >make

    输出结果:

    javac HelloWorld.java
    gcc -Ic:/java/jdk1.8.0_121/include/ -Ic:/java/jdk1.8.0_121/include/win32 -ohello_world hello_world.c -L c:/java/jdk1.8.0_121/jre/bin/server -ljvm
    ./hello_world
    Launched JVM! :)
    Hello, World
    20 squared is 400
    20 raised to the 3power is 8000

     

    展开全文
  • ArcObject for Java例子运行

    千次阅读 2017-09-25 15:43:47
    本机是先安装ArcGIS for Desktop,再安装ArcObjects SDK for java。或者采用ArcGIS Runtime后,再安装ArcObjects SDK for java。没有下载到engine runtime10.4.1版本。 运行的时候主要问题是jdk需要32位的(如果使用...

    本机是先安装ArcGIS for Desktop,再安装ArcObjects SDK for java。或者采用ArcGIS Runtime后,再安装ArcObjects SDK for java。没有下载到engine runtime10.4.1版本。

    运行的时候主要问题是jdk需要32位的(如果使用java -jar 方式,需要保证当前path指定的是32位,如果只是eclippse运行则没影响),然后选择desktop的arcobjects.jar.因为很多sample程序需要读取AGSDEVKITJAVA环境变量,如果没有装arcgis enngine,需要自己配置这个环境变量。


    配置eclipse中的esri开发插件

    Help菜单--->install new software

    具体路径:E:\Program Files (x86)\ArcGIS\DeveloperKit10.4\java\tools\eclipse_plugin\arcgis_update_site\arcobjects



    这里更新插件有palette无法安装,另一个插件安装后启动eclipse提示没有安装arcgis engine runtime,缺少部分功能,比如创建Arcgis Extension菜单(SOE等)就没有。

    这里的原因是由于没有arcgisengine的lience。使用包含engine的ArcGIS server的ecp重新更新之后,向导就全了。



    之前是使用eclipse直接导入esri的工程,现在安装了插件后可以使用模板直接生成例子。使用新建工程,然后选择ArcObjects Sample

    后面就是 选择自己需要的例子就可以自动加载相关代码和配置。







    展开全文
  • java例子 阶乘的递归实现

    千次阅读 2018-07-23 13:07:17
    代码部分 public class factorial { public static void main(String[] args) { int num=factor(5); System.out.println(num); } public static int factor(int n){ if(n==1){ ...
  • 阿里云一句话识别,Java例子

    千次阅读 2019-03-15 21:10:20
    介绍一下阿里云这一产品,并且在所给的例子上因为需要加一定的修改,做成自己想要的效果。 注重官方文档: https://help.aliyun.com/document_detail/84459.html?spm=a2c4g.11186623.6.560.77385397x0OfXk 2. 效果...
  • 人脸识别API-人脸比对(java例子)

    千次阅读 2018-09-27 11:51:46
    人脸比对图片   ... ...import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; impo...
  • 用Maven实现一个protobuf的Java例子

    千次阅读 2017-05-15 10:56:51
    最近需要用到protobuf协议,将json转化为protobuf,而事实上对protobuf完全不懂,所以参考了多篇文章先实际搭建一个例子看看,记录下过程。 1.首先去github上下载prtobuf-master.zip ...
  • 使用ObjectSNMP的java例子

    千次阅读 2009-12-20 19:51:00
    下面的例子,就是使用ObjectSNMP获取RFC1213-MIB的例子:其中的system和ifTable对象就是对应的SNMP MIB中的system组合interface中的ifTable表。 class TestMibMapping{ SNMPAPI snmpapi; SNMPNodeParam nodeParam; ...
  • XMLRPC简介与java例子

    千次阅读 2011-09-22 11:10:49
    2.在java中使用xml rpc的几个例子 2.0.环境准备:下载如下包并设置到CLASSPATH中 apache xmlrpc软件包(http://ws.apache.org/xmlrpc/) commons-httpclient-3.0-rc4.jar commons-codec-1.3.jar 2.1....
  • import java.util.Scanner;public class year { public static void main(String[] args) { Scanner scan=new Scanner(System.in); System.out.println("请输入一个年份"); long year;
  • import java.util.Scanner;//导包 Scanner public class Inputdata { public static void main(String[] args) { Scanner sc = new Scanner(System.in);// 创建对象 // 接收 System.out.println("请输入第一个数
  • 在我们的项目中,添加对gzip的支持,是为了加快数据在网络中的传输速度。 使用gzip,首先要设置请求消息头Accept-Encoding为gzip。这样,你将会得到一个响应,根据消息头Content-Encoding为... 用Java实现的gzip
  • 转自: http://www.blogjava.net/beansoft/archive/2008/01/26/177886.html 基于开源软件做个和GTalk聊天的小命令行程序 因为GTalk是基于Jabber的XMPP协议开发的,所以我们只要下载个Java 的XMPP协议类库就能和...
  • JAVA线程池例子

    万次阅读 2010-05-19 13:03:00
    Java代码 import java.util.LinkedList; import java.util.Properties; import redesigned.utils.PropReader; public class ThreadPool implements Pool{ private boolean isShut; private LinkedList pool; ...
  • kafka入门例子 for java

    千次阅读 2014-08-12 13:30:38
    kafka入门java例子 分布式日志消息队列
  • Java线程池例子

    万次阅读 2015-12-04 23:16:36
    在做很多高并发应用的时候,单线程的瓶颈已经满足不了我们的需求,此时使用多线程来提高处理速度已经是比较常规的方案了。...Java线程池说起来也简单,简单说下继承关系: ThreadPoolExecutor extends AbstractExecuto
  • JAVA BIO例子

    千次阅读 2016-07-17 09:15:47
    关键点:out.flush();...BioServer.java: package bio; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class BioServer { public static void main
  • Java 8 Streams map() 例子

    千次阅读 2017-05-22 22:00:14
    在java 8,stream().map()允许您将对象转换为别的。...1.1 简单的java例子把字符串列表转换为大写的情况. TestJava8.java package com.mkyong.java8; import java.util.ArrayList; import java.util.Arrays
  • java uploadify 例子

    千次阅读 2011-04-25 22:26:00
    commons-fileupload-1.2.1.jar commons-io... <br />  upload.java package servlet; import java.io.File; import java.io.IOException; import java.util.Iterator; import java.u
  • JavaAgent 简单例子

    万次阅读 2016-04-01 10:29:01
    JavaAgent 是JDK 1.5 以后引入的,也可以叫做Java代理。JavaAgent 是运行在 main方法之前的拦截器,它内定的方法名叫 premain ,也就是说先执行 premain 方法然后再执行 main 方法。那么如何实现一个 JavaAgent 呢?...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 99,793
精华内容 39,917
关键字:

java例子

java 订阅