Ignite dataStreamer不工作

Ignite dataStreamer不工作,ignite,Ignite,我正在使用以下代码探索Ignite dataStreamer。 但结果是: 对于MessageKey0001,输出的所有显示数据为空。 对于MessageKey0003,输出也显示所有数据为空 对于MessageKey0002,输出不显示任何内容,看起来接收方代码未运行 当我改变 dataStreamer.addData(i, "data-" + i); 到 future.get()不会返回,看起来addData也不会完成? 我不知道问题出在哪里,有人能看一下吗?谢谢 package igni

我正在使用以下代码探索Ignite dataStreamer。 但结果是:

对于MessageKey0001,输出的所有显示数据为空。 对于MessageKey0003,输出也显示所有数据为空 对于MessageKey0002,输出不显示任何内容,看起来接收方代码未运行

当我改变

dataStreamer.addData(i, "data-" + i);

future.get()不会返回,看起来addData也不会完成? 我不知道问题出在哪里,有人能看一下吗?谢谢

package ignite.streamer;

import org.apache.ignite.*;
import org.apache.ignite.cache.query.annotations.QuerySqlField;
import org.apache.ignite.configuration.CacheConfiguration;
import org.apache.ignite.stream.StreamReceiver;

import javax.cache.Cache;
import java.io.Serializable;
import java.util.Collection;
import java.util.Map;

class IgniteDataStreamer_Person implements Serializable {
    @QuerySqlField(index = true)
    private String name;

    @QuerySqlField(index = true)
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

public class IgniteDataStreamerTest {
    public static void main(String[] args) {
        String configPath = "D:/Software/apache-ignite-fabric-1.7.0-bin/apache-ignite-fabric-1.7.0-bin/config/default-config.xml";
        Ignite ignite = Ignition.start(configPath);
        CacheConfiguration<Integer, String> cfg = new CacheConfiguration<Integer, String>();
        String cacheName = "stream_cache";
        cfg.setName(cacheName);
        cfg.setIndexedTypes(Integer.class, IgniteDataStreamer_Person.class);
        Cache cache = ignite.getOrCreateCache(cfg);

        IgniteDataStreamer<Integer, String> dataStreamer = ignite.dataStreamer(cacheName);

        for (int i = 0; i < 3; i++) {
            dataStreamer.addData(i, "data-" + i);
        }

        //null is got from cache
        for (int i = 0; i < 3; i++) {
            System.out.println(String.format("0001: data is %s ", cache.get(i)));
        }

        dataStreamer.receiver(new StreamReceiver<Integer, String>() {
            public void receive(IgniteCache<Integer, String> cache, Collection<Map.Entry<Integer, String>> entries) throws IgniteException {
                //nothing is printed to console
                for (Map.Entry<Integer, String> entry : entries) {
                    System.out.println(String.format("0002: key is: %s, value is: %s", entry.getKey(), entry.getValue()));
                }
            }
        });

        //null is got from cache
        for (int i = 0; i < 3; i++) {
            System.out.println(String.format("0003: data is %s ", cache.get(i)));
        }
        ignite.close();
    }
}
package ignite.streamer;
导入org.apache.ignite.*;
导入org.apache.ignite.cache.query.annotations.QuerySqlField;
导入org.apache.ignite.configuration.CacheConfiguration;
导入org.apache.ignite.stream.StreamReceiver;
导入javax.cache.cache;
导入java.io.Serializable;
导入java.util.Collection;
导入java.util.Map;
类IgniteDataStreamer_Person实现可序列化{
@QuerySqlField(index=true)
私有字符串名称;
@QuerySqlField(index=true)
私人互联网;
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公共整数getAge(){
回归年龄;
}
公共无效设置(整数){
这个。年龄=年龄;
}
}
公共类数据流测试{
公共静态void main(字符串[]args){
字符串configPath=“D:/Software/apache-ignite-fabric-1.7.0-bin/apache-ignite-fabric-1.7.0-bin/config/default config.xml”;
Ignite Ignite=点火启动(configPath);
CacheConfiguration cfg=新的CacheConfiguration();
String cacheName=“stream\u cache”;
setName(cacheName);
setIndexedTypes(Integer.class、IgniteDataStreamer\u Person.class);
Cache Cache=ignite.getOrCreateCache(cfg);
IgniteDataStreamer-dataStreamer=ignite.dataStreamer(cacheName);
对于(int i=0;i<3;i++){
dataStreamer.addData(i,“数据-”+i);
}
//从缓存中获取null
对于(int i=0;i<3;i++){
System.out.println(String.format(“0001:数据是%s”,cache.get(i));
}
receiver(新的StreamReceiver(){
public void receive(IgniteCache缓存、集合项)引发IgniteException异常{
//控制台上没有打印任何内容
对于(Map.Entry:entries){
System.out.println(String.format(“0002:key是:%s,value是:%s”,entry.getKey(),entry.getValue());
}
}
});
//从缓存中获取null
对于(int i=0;i<3;i++){
System.out.println(String.format(“0003:数据是%s”,cache.get(i));
}
点燃。关闭();
}
}

DataStreamer使用批处理以提供良好的性能。在阻塞
future.get()
method之前,应该刷新案例中的数据(使用
flush()
method)


有关详细信息,请参见
IgniteDataStreamer
javadocs。

@Tom注意,每次添加数据时不应调用
dataStreamer.flush()
。一旦数据流填满其内部缓冲区,数据流将自动刷新数据。如果您添加来自某些外部源的数据,并且
addData
调用之间可能存在较大的间隔,则还可以使用
dataStreamer#autoFlushFrequency
启用后台数据刷新。还要注意,DataStreamer是一个可关闭的资源,您应该在添加所有数据后关闭它。它会在关闭时自动刷新。我还要补充一点,在已经添加了一些数据之后设置接收器没有多大意义。事实上,我认为在这种情况下应该抛出异常。感谢所有的人(阿尤古拉、阿列克谢、瓦伦丁)给出了很好的答案。现在我明白了。嗨@ValentinKulichenko,我也面临着类似的问题。为什么接收器中没有打印日志?你能帮我吗help@lucid你试过这次讨论中的建议了吗。Tom遇到了一个问题,因为代码不正确,上面已经描述过了。
package ignite.streamer;

import org.apache.ignite.*;
import org.apache.ignite.cache.query.annotations.QuerySqlField;
import org.apache.ignite.configuration.CacheConfiguration;
import org.apache.ignite.stream.StreamReceiver;

import javax.cache.Cache;
import java.io.Serializable;
import java.util.Collection;
import java.util.Map;

class IgniteDataStreamer_Person implements Serializable {
    @QuerySqlField(index = true)
    private String name;

    @QuerySqlField(index = true)
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

public class IgniteDataStreamerTest {
    public static void main(String[] args) {
        String configPath = "D:/Software/apache-ignite-fabric-1.7.0-bin/apache-ignite-fabric-1.7.0-bin/config/default-config.xml";
        Ignite ignite = Ignition.start(configPath);
        CacheConfiguration<Integer, String> cfg = new CacheConfiguration<Integer, String>();
        String cacheName = "stream_cache";
        cfg.setName(cacheName);
        cfg.setIndexedTypes(Integer.class, IgniteDataStreamer_Person.class);
        Cache cache = ignite.getOrCreateCache(cfg);

        IgniteDataStreamer<Integer, String> dataStreamer = ignite.dataStreamer(cacheName);

        for (int i = 0; i < 3; i++) {
            dataStreamer.addData(i, "data-" + i);
        }

        //null is got from cache
        for (int i = 0; i < 3; i++) {
            System.out.println(String.format("0001: data is %s ", cache.get(i)));
        }

        dataStreamer.receiver(new StreamReceiver<Integer, String>() {
            public void receive(IgniteCache<Integer, String> cache, Collection<Map.Entry<Integer, String>> entries) throws IgniteException {
                //nothing is printed to console
                for (Map.Entry<Integer, String> entry : entries) {
                    System.out.println(String.format("0002: key is: %s, value is: %s", entry.getKey(), entry.getValue()));
                }
            }
        });

        //null is got from cache
        for (int i = 0; i < 3; i++) {
            System.out.println(String.format("0003: data is %s ", cache.get(i)));
        }
        ignite.close();
    }
}