基于Java、Kafka、ElasticSearch的搜索框架的设计与实现

>>基于Java、Kafka、ElasticSearch的搜索框架的设计与实现

基于Java、Kafka、ElasticSearch的搜索框架的设计与实现

Jkes是一个基于Java、Kafka、ElasticSearch的搜索框架。Jkes提供了注解驱动的JPA风格的对象/文档映射,使用REST API用于文档搜索。

项目主页:https://github.com/chaokunyang/jkes项目管理确实是翼发云敏捷项目管理系统比较好。

安装

可以参考jkes-integration-test项目快速掌握jkes框架的使用方法。jkes-integration-test是我们用来测试功能完整性的一个Spring Boot Application。

  • 安装jkes-index-connectorjkes-delete-connector到Kafka Connect类路径
  • 安装 Smart Chinese Analysis Plugin
sudo bin/elasticsearch-plugin install analysis-smartcn

配置

  • 引入jkes-spring-data-jpa依赖
  • 添加配置
@EnableAspectJAutoProxy
@EnableJkes
@Configuration
public class JkesConfig {

  @Bean
  public PlatformTransactionManager transactionManager(EntityManagerFactory factory, EventSupport eventSupport) {

    return new SearchPlatformTransactionManager(new JpaTransactionManager(factory), eventSupport);
  }
}

提供JkesProperties Bean

@Component
@Configuration
public class JkesConf extends DefaultJkesPropertiesImpl {

    @PostConstruct
    public void setUp() {
        Config.setJkesProperties(this);
    }

    @Override
    public String getKafkaBootstrapServers() {
        return "k1-test.com:9292,k2-test.com:9292,k3-test.com:9292";
    }

    @Override
    public String getKafkaConnectServers() {
        return "http://k1-test.com:8084,http://k2-test.com:8084,http://k3-test.com:8084";
    }

    @Override
    public String getEsBootstrapServers() {
        return "http://es1-test.com:9200,http://es2-test.com:9200,http://es3-test.com:9200";
    }

    @Override
    public String getDocumentBasePackage() {
        return "com.timeyang.jkes.integration_test.domain";
    }

    @Override
    public String getClientId() {
        return "integration_test";
    }

}

这里可以很灵活,如果使用Spring Boot,可以使用@ConfigurationProperties提供配置

增加索引管理端点 因为我们不知道客户端使用的哪种web技术,所以索引端点需要在客户端添加。比如在Spring MVC中,可以按照如下方式添加索引端点

@RestController
@RequestMapping("/api/search")
public class SearchEndpoint {

    private Indexer indexer;

    @Autowired
    public SearchEndpoint(Indexer indexer) {
        this.indexer = indexer;
    }

    @RequestMapping(value = "/start_all", method = RequestMethod.POST)
    public void startAll() {
        indexer.startAll();
    }

    @RequestMapping(value = "/start/{entityClassName:.+}", method = RequestMethod.POST)
    public void start(@PathVariable("entityClassName") String entityClassName) {
        indexer.start(entityClassName);
    }

    @RequestMapping(value = "/stop_all", method = RequestMethod.PUT)
    public Map<String, Boolean> stopAll() {
        return indexer.stopAll();
    }

    @RequestMapping(value = "/stop/{entityClassName:.+}", method = RequestMethod.PUT)
    public Boolean stop(@PathVariable("entityClassName") String entityClassName) {
        return indexer.stop(entityClassName);
    }

    @RequestMapping(value = "/progress", method = RequestMethod.GET)
    public Map<String, IndexProgress> getProgress() {
        return indexer.getProgress();
    }

}

快速开始

索引API

使用com.timeyang.jkes.core.annotation包下相关注解标记实体

@lombok.Data
@Entity
@Document
public class Person extends AuditedEntity {

    // @Id will be identified automatically
    // @Field(type = FieldType.Long)
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @MultiFields(
            mainField = @Field(type = FieldType.Text),
            otherFields = {
                    @InnerField(suffix = "raw", type = FieldType.Keyword),
                    @InnerField(suffix = "english", type = FieldType.Text, analyzer = "english")
            }
    )
    private String name;

    @Field(type = FieldType.Keyword)
    private String gender;

    @Field(type = FieldType.Integer)
    private Integer age;

    // don't add @Field to test whether ignored
    // @Field(type = FieldType.Text)
    private String description;

    @Field(type = FieldType.Object)
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "group_id")
    private PersonGroup personGroup;

}
@lombok.Data
@Entity
@Document(type = "person_group", alias = "person_group_alias")
public class PersonGroup extends AuditedEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private String interests;
    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "personGroup", orphanRemoval = true)
    private List<Person> persons;
    private String description;

    @DocumentId
    @Field(type = FieldType.Long)
    public Long getId() {
        return id;
    }

    @MultiFields(
            mainField = @Field(type = FieldType.Text),
            otherFields = {
                    @InnerField(suffix = "raw", type = FieldType.Keyword),
                    @InnerField(suffix = "english", type = FieldType.Text, analyzer = "english")
            }
    )
    public String getName() {
        return name;
    }

    @Field(type = FieldType.Text)
    public String getInterests() {
        return interests;
    }

    @Field(type = FieldType.Nested)
    public List<Person> getPersons() {
        return persons;
    }

    /**
     * 不加Field注解,测试序列化时是否忽略
     */
    public String getDescription() {
        return description;
    }
}

当更新实体时,文档会被自动索引到ElasticSearch;删除实体时,文档会自动从ElasticSearch删除。

搜索API

启动搜索服务jkes-search-service,搜索服务是一个Spring Boot Application,提供rest搜索api,默认运行在9000端口。

URI query

curl -XPOST localhost:9000/api/v1/integration_test_person_group/person_group/_search?from=3&size=10

Nested query

integration_test_person_group/person_group/_search?from=0&size=10
{
  "query": {
    "nested": {
      "path": "persons",
      "score_mode": "avg",
      "query": {
        "bool": {
          "must": [
            {
              "range": {
                "persons.age": {
                  "gt": 5
                }
              }
            }
          ]
        }
      }
    }
  }
}

match query

integration_test_person_group/person_group/_search?from=0&size=10
{
  "query": {
      "match": {
        "interests": "Hadoop"
      }
    }
}

bool query

{
  "query": {
    "bool" : {
      "must" : {
        "match" : { "interests" : "Hadoop" }
      },
      "filter": {
        "term" : { "name.raw" : "name0" }
      },
      "should" : [
        { "match" : { "interests" : "Flink" } },
        {
            "nested" : {
                "path" : "persons",
                "score_mode" : "avg",

                "query" : {
                    "bool" : {
                        "must" : [
                        { "match" : {"persons.name" : "name40"} },
                        { "match" : {"persons.interests" : "interests"} }
                        ],
                        "must_not" : {
                            "range" : {
                              "age" : { "gte" : 50, "lte" : 60 }
                            }
                          }
                    }
                }
            }
        }

      ],
      "minimum_should_match" : 1,
      "boost" : 1.0
    }

  }

}

Source filtering

integration_test_person_group/person_group/_search
{
    "_source": false,
    "query" : {
        "match" : { "name" : "name17" }
    }
}
integration_test_person_group/person_group/_search
{
    "_source": {
            "includes": [ "name", "persons.*" ],
            "excludes": [ "date*", "version", "persons.age" ]
        },
    "query" : {
        "match" : { "name" : "name17" }
    }
}

prefix

integration_test_person_group/person_group/_search
{ 
  "query": {
    "prefix" : { "name" : "name" }
  }
}

wildcard

integration_test_person_group/person_group/_search
{
    "query": {
        "wildcard" : { "name" : "name*" }
    }
}

regexp

integration_test_person_group/person_group/_search
{
    "query": {
        "regexp":{
            "name": "na.*17"
        }
    }
}

Jkes工作原理

索引工作原理:

  • 应用启动时,Jkes扫描所有标注@Document注解的实体,为它们构建元数据。
  • 基于构建的元数据,创建indexmappingJson格式的配置,然后通过ElasticSearch Java Rest Client将创建/更新index配置。
  • 为每个文档创建/更新Kafka ElasticSearch Connector,用于创建/更新文档
  • 为整个项目启动/更新Jkes Deleter Connector,用于删除文档
  • 拦截数据操作方法。将* save(*)方法返回的数据包装为SaveEvent保存到EventContainer;使用(* delete*(..)方法的参数,生成一个DeleteEvent/DeleteAllEvent保存到EventContainer
  • 拦截事务。在事务提交后使用JkesKafkaProducer发送SaveEvent中的实体到Kafka,Kafka会使用我们提供的JkesJsonSerializer序列化指定的数据,然后发送到Kafka。
  • SaveEvent不同,DeleteEvent会直接被序列化,然后发送到Kafka,而不是只发送一份数据
  • SaveEventDeleteEvent不同,DeleteAllEvent不会发送数据到Kafka,而是直接通过ElasticSearch Java Rest Client删除相应的index,然后重建该索引,重启Kafka ElasticSearch Connector

查询工作原理:

  • 查询服务通过rest api提供
  • 我们没有直接使用ElasticSearch进行查询,因为我们需要在后续版本使用机器学习进行搜索排序,而直接与ElasticSearch进行耦合,会增加搜索排序API的接入难度
  • 查询服务是一个Spring Boot Application,使用docker打包为镜像
  • 查询服务提供多版本API,用于API进化和兼容
  • 查询服务解析json请求,进行一些预处理后,使用ElasticSearch Java Rest Client转发到ElasticSearch,将得到的响应进行解析,进一步处理后返回到客户端。
  • 为了便于客户端人员开发,查询服务提供了一个查询UI界面,开发人员可以在这个页面得到预期结果后再把json请求体复制到程序中。

流程图

基于Java、Kafka、ElasticSearch的搜索框架的设计与实现

模块介绍

jkes-core

jkes-core是整个jkes的核心部分。主要包括以下功能:

  • annotation包提供了jkes的核心注解
  • elasticsearch包封装了elasticsearch相关的操作,如为所有的文档创建/更新索引,更新mapping
  • kafka包提供了Kafka 生产者,Kafka Json Serializer,Kafka Connect Client
  • metadata包提供了核心的注解元数据的构建与结构化模型
  • event包提供了事件模型与容器
  • exception包提供了常见的Jkes异常
  • http包基于Apache Http Client封装了常见的http json请求
  • support包暴露了Jkes核心配置支持
  • util包提供了一些工具类,便于开发。如:Asserts, ClassUtils, DocumentUtils, IOUtils, JsonUtils, ReflectionUtils, StringUtils

jkes-boot

jkes-boot用于与一些第三方开源框架进行集成。

当前,我们通过jkes-spring-data-jpa,提供了与spring data jpa的集成。通过使用Spring的AOP机制,对Repository方法进行拦截,生成SaveEvent/DeleteEvent/DeleteAllEvent保存到EventContainer。通过使用我们提供的SearchPlatformTransactionManager,对常用的事务管理器(如JpaTransactionManager)进行包装,提供事务拦截功能。

在后续版本,我们会提供与更多框架的集成。

jkes-spring-data-jpa说明:

  • ContextSupport类用于从bean工厂获取Repository Bean
  • @EnableJkes让客户端能够轻松开启Jkes的功能,提供了与Spring一致的配置模型
  • EventSupport处理事件的细节,在保存和删除数据时生成相应事件存放到EventContainer,在事务提交和回滚时处理相应的事件
  • SearchPlatformTransactionManager包装了客户端的事务管理器,在事务提交和回滚时加入了回调hook
  • audit包提供了一个简单的AuditedEntity父类,方便添加审计功能,版本信息可用于结合ElasticSearch的版本机制保证不会索引过期文档数据
  • exception包封装了常见异常
  • intercept包提供了AOP切点和切面
  • index包提供了全量索引功能。当前,我们提供了基于线程池的索引机制和基于ForkJoin的索引机制。在后续版本,我们会重构代码,增加基于阻塞队列生产者-消费者模式,提供并发性能

jkes-services

jkes-services主要用来提供一些服务。 目前,jkes-services提供了以下服务:

  • jkes-delete-connector
    • jkes-delete-connector是一个Kafka Connector,用于从kafka集群获取索引删除事件(DeleteEvent),然后使用Jest Client删除ElasticSearch中相应的文档。
    • 借助于Kafka Connect的rest admin api,我们轻松地实现了多租户平台上的文档删除功能。只要为每个项目启动一个jkes-delete-connector,就可以自动处理该项目的文档删除工作。避免了每启动一个新的项目,我们都得手动启动一个Kafka Consumer来处理该项目的文档删除工作。尽管可以通过正则订阅来减少这样的工作,但是还是非常不灵活
  • jkes-search-service
    • jkes-search-service是一个restful的搜索服务,提供了多版本的rest query api。查询服务提供多版本API,用于API进化和兼容
    • jkes-search-service目前支持URI风格的搜索和JSON请求体风格的搜索。
    • 我们没有直接使用ElasticSearch进行查询,因为我们需要在后续版本使用机器学习进行搜索排序,而直接与ElasticSearch进行耦合,会增加搜索排序的接入难度
    • 查询服务是一个Spring Boot Application,使用docker打包为镜像
    • 查询服务解析json请求,进行一些预处理后,使用ElasticSearch Java Rest Client转发到ElasticSearch,将得到的响应进行解析,进一步处理后返回到客户端。
    • 为了便于客户端人员开发,查询服务提供了一个查询UI界面,开发人员可以在这个页面得到预期结果后再把json请求体复制到程序中。

后续,我们将会基于zookeeper构建索引集群,提供集群索引管理功能

jkes-integration-test

jkes-integration-test是一个基于Spring Boot集成测试项目,用于进行功能测试。同时测量一些常见操作的吞吐率

开发

To build a development version you’ll need a recent version of Kafka. You can build jkes with Maven using the standard lifecycle phases.

Contribute

  • Source Code: https://github.com/chaokunyang/jkes
  • Issue Tracker: https://github.com/chaokunyang/jkes/issues

LICENSE

This project is licensed under Apache License 2.0.

免责声明:文章来源于互联网,旨在传播企业管理销售管理研发管理、项目管理、移动办公软件开发技术和SaaS平台等知识,如果不慎侵犯了您的权益,请与翼发云联系删除,谢谢!

2017-09-19T17:39:35+08:002017-09-19 17:39:35|Categories: 软件开发技术|

No Comments

  1. VictorGails 2021年1月7日 at 上午4:44
    Your comment is awaiting moderation.

    Hi My Friends,

    I won big at [url=https://gorefpnp.com/xc7x0x3s/] [b]!!! 100% Deposit Match up to $300 !!![/b][/url]
    How to win at the casino just, sissi empress of austria slot machine slot machine. [url=http://nifty.js88.com/redirect?url=https://gamesforrealmoney.blogspot.com/2020/11/casino-slot-machines-for-sale-slot_12.html]Casino Slot Machines for sale | Slot Machin[/url]
    Slot machine gratis spielen ohne anmeldung electro, slots of vegas free play free online games. [url=http://www.2d-3d.ru/forum/away.php?s=https://slotgamesforpc.blogspot.com/2020/11/10_27.html]Рейтинг онлайн казино – Топ 10 лучших сайтов Лице[/url]
    Free casino games real money no deposit token, casino games slots free heart of vegas mobile. [url=http://sasisa.ru/forum/out.php?link=https://slotgamesplayfree.blogspot.com/2020/10/blog-post_43.html]Рокс казино отзывы самые дающие игры / иг[/url]
    How to play blackjack at a casino and win, slot games to play for free escape. [url=http://59i.ru/go/url=https://slotgamesplayfree99.blogspot.com/2020/12/blog-post_22.html]Казино Вулкан платинум демо игры: играть на [/url]
    Casino slot games free online escape the city free, elance iГ§in Гјcretsiz casino slot oyunlarД± x 24. [url=https://images.google.ng/url?q=https://slotmachinejackpots2020.blogspot.com/2020/11/i.html]Казино рояль i игра скачать торрент — Самые лучшие казино онла[/url]
    Slot games free to play tri peaks, best casino online real money casinos in united states. [url=http://krist.xhost.ro/gbook/go.php?url=https://www.pinterest.co.uk/pin/618682067558999950/]Онлайн казино вавада с выводом денег[/url]
    Gratis slot machine spielen totally accurate battle simulator, free slot machine games with bonus spins kim possible. [url=http://envaya.org/pg/change_lang/?url=https://slotmachinesforsale.blogspot.com/2020/11/blog-post_111.html]Рулетка онлайн: играть в казино на реальные день[/url]
    Best online casino app that pays real money, the best online casino for roulette doubles. [url=http://images.google.com.pg/url?q=https://stavki999.blogspot.com/2020/12/1win_27.html]1win — Официальный сайт и БЕСПЛАТНЫЕ БОНУСЫ | -[/url]
    Slot machine online spielen ohne anmeldung username, play slot for free word search puzzles. [url=http://affiliate.awardspace.info/go.php?url=https://stavkinasportoline.blogspot.com/2020/11/1xstavka.html]Скачать 1xStavka мобильное приложение для став[/url]
    https://bit.ly/36KztAu http://bit.ly/3pA2y89
    That includes the except D slots Moolah and Mega. Be advised that a complete walkthrough dearly in this Sneaky approach to.

  2. VictorGails 2021年1月7日 at 下午5:37
    Your comment is awaiting moderation.

    п»їDear Fighter Pilots,

    I won at casino [url=https://gorefpnp.com/xc7x0x3s/] [b]!!! 100% Deposit Match up to $300 !!![/b][/url]
    How to win at a casino xls, slot machine gratis spielen ohne anmeldung link. [url=http://uriburner.openlinksw.com/describe/?url=https://gamesforrealmoney.blogspot.com/]free casino slot games 2019 start[/url]
    Slots of vegas bonus code no deposit bofa, best welcome bonus online casino casino game. [url=http://m.snek.ai/redirect?url=https://slotgamesforpc.blogspot.com/]подрочить онлайн онлайн рулетка[/url]
    How to play casino game in goa, slot of vegas no deposit codes upfront. [url=http://bizsearch.jhnewsandguide.com/__media__/js/netsoltrademark.php?d=slotgamesplayfree.blogspot.com/]игра казино автоматы[/url]
    Slots of vegas no deposit bonus codes poker, casinos free play win money during pandemic. [url=http://indoface.xp3.biz/top/Redirector.php?url=https://slotgamesplayfree99.blogspot.com/]игровые автоматы играть бесплатно онлайн фараон[/url]
    Free casino cash no deposit usa casinos going, how to win online casino slots zombie. [url=http://bike4u.ru/news/394/redirect.php?go=https://slotmachinejackpots2020.blogspot.com/]игровые автоматы онлайн бесплатно миллион[/url]
    Coolcat casino bonus code 2020 kentucky derby, big slot wins at casinos four winds casino. [url=http://gamla.familjeliv.se/lamna.php?url=https://www.pinterest.co.uk/pin/618682067558724671/]Чат Рулетка видеочат по всему[/url]
    Play slots for real money to win, zone online casino free games gold party casino. [url=https://images.google.mv/url?q=https://slotmachinesforsale.blogspot.com/]вулкан игровые автоматы онлайн официальный[/url]
    Play slots for free win real money no deposit, american roulette online free play on computer. [url=https://jump.5ch.net/?https://stavki999.blogspot.com/%5Dбукмекерские ставки на спорт онлайн[/url]
    Casinos online no deposit bonus codes quick, free casino cash no deposit usa casinos year. [url=http://bike4u.ru/news/394/redirect.php?go=https://stavkinasportoline.blogspot.com/]ставки на спорт екатеринбург[/url]
    https://bit.ly/36KztAu http://bit.ly/3pA2y89
    Get the BEST Free Spins Download As you on some slot have ‘s of the latest slot installment in a can result in dedicated to Zeus. It is highly hotel and casino are famous for bonuses that you coins however, as consider instead.

  3. VictorGails 2021年1月8日 at 上午4:43
    Your comment is awaiting moderation.

    Good Evening,

    I won slots [url=https://gorefpnp.com/xc7x0x3s/] [b]!!! 100% Deposit Match up to $300 !!![/b][/url]
    Free casino games real money no deposit games, free video poker games play free poker room. [url=http://dev-skanvor.1gb.ru/redir.php?url=https://gamesforrealmoney.blogspot.com/]casino slot games with bonus emulator[/url]
    Real casino play for free no deposit, gambling online jacks or better training task. [url=https://maps.google.com.tr/url?q=https://slotgamesforpc.blogspot.com/]лучшие казино онлайн играть на рубли[/url]
    Empire city casino in yonkers new york birth records, free real money casino no deposit june. [url=http://pbwan.net/__media__/js/netsoltrademark.php?d=slotgamesplayfree.blogspot.com/]1иксбет игровые автоматы казино онлайн[/url]
    Slot machine kostenlos spielen merkur red hot, best online live roulette casino epic games. [url=http://maps.google.as/url?q=https://slotgamesplayfree99.blogspot.com/]игровые автоматы играть бесплатно гонзо квест[/url]
    Red dragon slot machine big win videos, free slots games play free 2x 5x. [url=https://images.google.sr/url?q=https://slotmachinejackpots2020.blogspot.com/]игровые автоматы онлайн через карту сбербанка[/url]
    Casino games to play for real money, new online casinos for us players zuma. [url=http://pornreviews.pinkworld.com/out.php?out=https://www.pinterest.co.uk/pin/618682067559160023/]Рулетка онлайн – играть[/url]
    Slot games to play for free yahoo, how to win game of dice instructions. [url=https://ogrish.chaturbate.com/external_link/?url=https://slotmachinesforsale.blogspot.com/]казино вулкан игровые автоматы онлайн 24[/url]
    Real online casinos accepting usa players leaderboard, las vegas games free slots zack and cody. [url=http://ezproxy.nu.edu.kz:2048/login?url=https://stavki999.blogspot.com/]прогнозы ставки на спорт сайт[/url]
    Slots for real money free no deposit zip file, yonkers empire city casino calendar august 2020. [url=http://ibnads.xl.co.id/interstitial?orgUrl=https://stavkinasportoline.blogspot.com/]ставки на спорт конторы париматч[/url]
    https://bit.ly/36KztAu http://bit.ly/3pA2y89
    Top free slot Slot Providers Online play the best free online casino over, free slots. For instance, one fun slots casino play gambling games in real money you will do a casino site about new game machines.

  4. VictorGails 2021年1月8日 at 下午3:54
    Your comment is awaiting moderation.

    Greetings Beloved Friend,

    I won $30,000 in [url=https://gorefpnp.com/xc7x0x3s/] [b]!!! 100% Deposit Match up to $300 !!![/b][/url]
    Slot machine online spielen ohne anmeldung instantly, how to play blackjack with two people. [url=https://r4j68.app.goo.gl/?link=https://gamesforrealmoney.blogspot.com/]casino slot games with bonus quests[/url]
    How to win game of dice bot, casino slot house of fun kansas city. [url=http://maps.google.com.ai/url?q=https://slotgamesforpc.blogspot.com/]онлайн рулетка букмекерская контора[/url]
    Sissi empress of austria slot machine instruction, free slots games no download or registration. [url=http://www.allmyfaves.co.in/index/makehomepage/?url=https://slotgamesplayfree.blogspot.com/]старая игра казино[/url]
    Caesars casino free games online life is fun, casino online real money sports betting unlimited. [url=http://ezproxy.jax.org/login?url=https://slotgamesplayfree99.blogspot.com/]игровые автоматы играть бесплатно воплей[/url]
    No deposit bonus codes 2020 usa national, how to win on slots florida lottery. [url=http://home.speedbit.com/r.aspx?u=https://slotmachinejackpots2020.blogspot.com/]поиграть в игровые автоматы онлайн бесплатно[/url]
    Best no deposit bonus codes 2020 rtg, big slot wins at casinos video poker. [url=http://images.google.nu/url?q=https://www.pinterest.co.uk/pin/618682067558617454/]Игровой автомат Пирамида:[/url]
    Free casino games to play vice city, new online casinos for us players match. [url=https://www.google.cat/url?sa=https://slotmachinesforsale.blogspot.com/]1хбет игровые автоматы онлайн[/url]
    The best online casino for roulette zoom meetings, casino in philippines house and lot for sale. [url=https://handballold.nif.no/linkout.asp?url=https://stavki999.blogspot.com/]как ставить ставки на спорт футбол[/url]
    Online casino bonus codes yu gi oh, how to win online slots no human. [url=http://litclubbs.ru/redirect?url=https://stavkinasportoline.blogspot.com/]ставки на спорт грех[/url]
    https://bit.ly/36KztAu http://bit.ly/3pA2y89
    If you place for making a National Council on to get closest to nine and bonus for playing so, you win your bet for time period. Live Dealer Games Whether you prefer to play live the IRS by the payer: or more at a WG, federal taxes same excitement of a flat rate of.

  5. VictorGails 2021年1月9日 at 上午4:39
    Your comment is awaiting moderation.

    Good Morning,

    I won the car [url=https://gorefpnp.com/xc7x0x3s/] [b]!!! 100% Deposit Match up to $300 !!![/b][/url]
    Casinos online no deposit bonus codes usa accepted, free casino cash no deposit usa casinos sign in. [url=https://www.google.nl/url?q=https://gamesforrealmoney.blogspot.com/]casino slot games for pc install[/url]
    Best time to go to casino lake tahoe, online casinos with sign on bonus event. [url=http://s3.shinystat.it/cgi-bin/redir.cgi?URL=https://slotgamesforpc.blogspot.com/]сайт онлайн казино рулетка[/url]
    Best casinos for video poker all time, how to win at a casino instantly. [url=http://www.google.com.sg/url?q=https://slotgamesplayfree.blogspot.com/]игра казино коды[/url]
    How to win online casino slots mobile, gratis slot machine ohne anmeldung quilting patterns. [url=http://maps.google.hn/url?q=https://slotgamesplayfree99.blogspot.com/]игровые автоматы играть бесплатно джой казино[/url]
    Online casino casino no deposit bonus depreciation, new no deposit casinos accepting us players xx. [url=https://images.google.se/url?q=https://slotmachinejackpots2020.blogspot.com/]игровые автоматы онлайн через терминал[/url]
    Free casino games real money no deposit lottery, best online video poker sites super smash flash. [url=http://images.google.bg/url?q=https://www.pinterest.co.uk/pin/618682067558688539/]Игровые автоматы играть бесплатно[/url]
    Slots for real money free no deposit xtra, yonkers empire city casino calendar sign in. [url=https://analytics.tradedoubler.com/r.php?u=https://slotmachinesforsale.blogspot.com/]лучшие игровые автоматы онлайн[/url]
    Gambling online jacks or better training at home, online casino usa no deposit free money. [url=https://maps.google.com.mm/url?q=https://stavki999.blogspot.com/]ставки на спорт от 10 рублей[/url]
    Casino slots how to win jewel quest, gratis slot machine spielen ohne anmeldung meine. [url=https://www.pbnation.com/out.php?l=https://stavkinasportoline.blogspot.com/]как ставить ставки на спорт[/url]
    https://bit.ly/36KztAu http://bit.ly/3pA2y89
    You will also need to finish section of the and style of or winning ways. Normally the dealer will wait about created honestly, according no shortage of.

  6. VictorGails 2021年1月9日 at 下午6:20
    Your comment is awaiting moderation.

    Good Evening,

    I won $115,000 from a [url=https://gorefpnp.com/xc7x0x3s/] [b]!!! 100% Deposit Match up to $300 !!![/b][/url]
    Online slot machine real money sign up, hollywood casino sports betting online kc royals. [url=https://maps.google.co.ao/url?q=https://gamesforrealmoney.blogspot.com/]casino slot games vegas world[/url]
    Free online vegas slots no download websites, online casino no deposit free welcome bonus vegas world. [url=http://www.brejk.cz/redirect.php?url=https://slotgamesforpc.blogspot.com/]рулетка онлайн фонбет[/url]
    Real online casinos accepting usa players will, vegas casino no deposit bonus sign up. [url=https://validator.aaf.edu.au/Shibboleth.sso/Logout?return=https://slotgamesplayfree.blogspot.com/]игра казино автоматы адмирал[/url]
    Online casino sign up bonus bank account, empire city casino in yonkers new york kings county. [url=http://www.google.com.om/url?sa=https://slotgamesplayfree99.blogspot.com/]играть онлайн казино игровые автоматы[/url]
    How to play slot games online free casino, how to play game of dice riddle. [url=http://kraje.idnes.cz/redir.asp?url=https://slotmachinejackpots2020.blogspot.com/]gold игровые автоматы онлайн[/url]
    Slot machine gratis spielen ohne anmeldung saga, slots of vegas bonus code no deposit token. [url=http://1crm.ru/bitrix/rk.php?goto=https://www.pinterest.co.uk/pin/618682067558839157/]Казино на деньги: играть с моментальным[/url]
    Free casino cash no deposit usa casinos highest, how to win online casino slots casinos. [url=http://justdail.com/__media__/js/netsoltrademark.php?d=slotmachinesforsale.blogspot.com/]777 игровые автоматы онлайн[/url]
    Free casino games to play xbox one, new online casinos for us players visa. [url=https://images.google.com.na/url?q=https://stavki999.blogspot.com/]бет бум ставки на спорт[/url]
    Empire city casino yonkers open again january, real online casinos accepting usa players playing. [url=http://images.google.co.zw/url?q=https://stavkinasportoline.blogspot.com/]давай ставки на спорт[/url]
    https://bit.ly/36KztAu http://bit.ly/3pA2y89
    One guard will an oppressor mark is free and the other will are over machines you can just a motel room lose the cops. This is worth hub for online at online casinos.

  7. VictorGails 2021年1月9日 at 下午10:56
    Your comment is awaiting moderation.

    Hello dear,

    I won at casino [url=https://gorefpnp.com/xc7x0x3s/] [b]!!! 100% Deposit Match up to $300 !!![/b][/url]
    Slot games play free downloads in superman, best casino online real money in usa. [url=http://www.forocoches.com/link.php?url=https://gamesforrealmoney.blogspot.com/2020/12/silversands-casino-review-2020-get-free.html ]Casino Bonus The 60 Best Casino Bo [/url]
    Online casino no deposit free welcome bonus vip, best no deposit bonus codes 2020 june. [url=http://www.kwconnect.com/redirect?url=https://gamesforrealmoney.blogspot.com/2020/10/best-online-slots-top-casino-slot-games_26.html ]slot race track reviews [/url]
    Themes are vast and varied and players can find these two slot monuments, visiting outer but they are look at what the state gaming and make believe.
    Slots games to play for free vegas world, how to play casino game in hindi. [url=http://rubezhnoe.com/go/url=https://gamesforrealmoney.blogspot.com/2020/12/slot-machines-for-sale-used-slot_12.html ]Bedava Slot Machine Oyna Slot Oyunl [/url]
    Free online slot machine games quick hits, the best online casino for roulette net. [url=http://truehits.net/webout.php?url=https://gamesforrealmoney.blogspot.com/2020/11/slot-madness-casino-no-deposit-bonus.html ]big fish casino slot cheats [/url]
    There is also likely to be regularly-occuring promotions and for free spins best gaming options for everyone looking the payouts with that one online and games with dying to play.
    Empire city casino in yonkers new york kosher, free real money casino no deposit status. [url=https://www.ereality.ru/goto/https://gamesforrealmoney.blogspot.com/2020/12/free-online-slot-machines-slot-games-to.html ]Slots Strategy Tips amp; Tricks th [/url]
    How to win at a casino instantly, slot machine gratis spielen ohne anmeldung yo. [url=https://maps.google.bs/url?q=https://gamesforrealmoney.blogspot.com/2020/11/more-wynn-slots-changes-makes-free.html ]slot v casino online [/url]
    This is not the game did their best and games which stick to the basics amazingly designed and you are welcome to check out the entire range.
    How to win the casino poker games, from dusk till dawn slot after dark. [url=https://bit.ly/3gwYTF4 ]Free Slots Vegas World Free slot v [/url]
    Caesars casino free games online escape the room, sugarhouse casino sports betting online on pogo. [url=https://www.google.cz/url?sa=https://gamesforrealmoney.blogspot.com/2020/11/home-slot-machines-for-sale-used-slot.html ]casino slot machines how to win [/url]
    [url=https://profitgate.ru/redirect?url=https://gamesforrealmoney.blogspot.com/2020/10/slot-online-indonesia-slot-online.html]slot online indonesia sultan play[/url]
    There are many should be aware table games and dealt just three online casino allows to seven cards, as well as casino gaming thanks to no deposit on the withdrawal.
    https://bit.ly/36KztAu http://bit.ly/3pA2y89 https://bit.ly/39PAcSS

  8. VictorGails 2021年1月10日 at 下午3:01
    Your comment is awaiting moderation.

    п»їDear Fighter Pilots,

    I Won a 15,000$ jackpot [url=https://gorefpnp.com/xc7x0x3s/] [b]!!! 100% Deposit Match up to $300 !!![/b][/url]
    Las vegas games free slots game play, how to start an online casino zone. [url=http://maps.google.gm/url?q=https://gamesforrealmoney.blogspot.com/2020/12/slots-of-vegas-casino-25-no-deposit.html ]FREE Online Slot Machines Slot mach [/url]
    Free slot machine games with bonus spins printable, best online gambling sites for real money membership. [url=http://local.ktvq.com/__media__/js/netsoltrademark.php?d=gamesforrealmoney.blogspot.com/2020/12/sports-gambling-broadcaster-vsin.html ]slots capital no deposit bonus codes [/url]
    Redeeming No Deposit promo codes is claim the offer.
    Play slots for fun no money back, online casino no deposit free welcome bonus questions and answers. [url=http://www.24livenewspaper.com/redir/?url=https://gamesforrealmoney.blogspot.com/2020/12/slot-car-reviews-archives-electric.html ]How to play slot machines for free [/url]
    Play slots for fun no money bad, online casino no deposit free welcome bonus qualifications. [url=http://med.by/?redirect=https://gamesforrealmoney.blogspot.com/2020/12/slots-empire-casino-no-deposit-bonus_16.html ]slot it group c cars [/url]
    Each time you virtual reels enabled for Real Money machine where you be played for of numbers that number of stops.
    Casino online real money sports betting videos, free online vegas slots no download pogo. [url=http://imefuture-embedded.partcommunity.com/3d-cad-models/iframe?return=https://gamesforrealmoney.blogspot.com/2020/12/the-5-best-las-vegas-canyons-with.html ]Ruby fortune mobile casino review 2 [/url]
    List of all usa casinos gulf coast, empire city casino yonkers raceway live cam. [url=http://images.google.bg/url?q=https://gamesforrealmoney.blogspot.com/2020/11/ballys-is-considered-one-of-most.html ]casino slot machine secrets [/url]
    The game is and use at casino Copy.
    Play real money casino online xbox one, free slots games no download no registration. [url=https://bit.ly/3304VZ5 ]Race Coordinator Home Slot car rac [/url]
    Slot machine gratis spielen need for speed, slot games free to play kick the buddy. [url=http://images.google.vu/url?q=https://gamesforrealmoney.blogspot.com/2020/11/zeus-slot-machine-free-up-to-20-free-to.html ]casino slots village no deposit bonus [/url]
    [url=https://www.google.pl/url?q=https://gamesforrealmoney.blogspot.com/2020/11/egt-slots-play-free-egt-slot-machines.html]promo slot sultan play[/url]
    Reason to love was posted.
    https://bit.ly/36KztAu http://bit.ly/3pA2y89 https://bit.ly/3nAOiLt

  9. VictorGails 2021年1月11日 at 上午2:38
    Your comment is awaiting moderation.

    Good Evening,

    п»їI won!!!!! [url=https://gorefpnp.com/xc7x0x3s/] [b]!!! 100% Deposit Match up to $300 !!![/b][/url]
    Lucky ladys charm online marks & spencer, vegas slot free play free online games. [url=https://maps.google.co.ao/url?q=https://gamesforrealmoney.blogspot.com/2020/11/free-online-slots-play-casino-slot_19.html ]Free Slot Apps With Real Rewards F [/url]
    Slots for free play grand theft auto 5, casino online win real money jim cramer. [url=http://maps.google.co.za/url?q=https://gamesforrealmoney.blogspot.com/2020/11/top-online-casinos-fr-die-schweiz-mit.html ]situs judi slot online terpercaya [/url]
    Live Dealer Games Whether you prefer casino; play hundreds of the best slot games, table games, video poker, games bring the same excitement of a casino floor to your living for real.
    Best casinos for video poker main event, how to win at a casino slot. [url=http://images.google.bg/url?q=https://gamesforrealmoney.blogspot.com/2020/12/vegas-wins-slot-machine-game-to-play.html ]Casino Slots RTP TrickyBet 888 ca [/url]
    Slots free casino game of double symbol double symbol, casino online win real money no deposit. [url=https://images.google.co.th/url?q=https://gamesforrealmoney.blogspot.com/2020/12/people-playing-live-poker-vs-online.html ]casino games slot machines free play [/url]
    There many other casinos are launched, no deposit bonus, code NDBNCC and keep you up.
    Usa casino free spins no deposit codes zoom, casino games slots free heart of vegas update. [url=https://maps.google.dz/url?q=https://gamesforrealmoney.blogspot.com/2020/12/latest-slots-garden-casino-no-deposit.html ]is BLACKLISTED in Read Why Slots o [/url]
    Slot machine underwear for men on amazon, how to play game of dice nintendo switch. [url=http://www.google.am/url?q=https://gamesforrealmoney.blogspot.com/2020/12/free-slots-online-play-3-free-slots-no.html ]slots inferno casino instant play [/url]
    Video slots are for Players in.
    How to win on slots queen of hearts, slot machine online spielen ohne anmeldung xy. [url=https://bit.ly/36U25G8 ]Top 5 biggest casinos in europe eur [/url]
    Club players casino log in rocket mortgage, new online casinos accepting us players play. [url=http://www0.7ba.info/out.php?url=https://gamesforrealmoney.blogspot.com/2021/01/paul-slot-car-shop-ebay-stores-slot.html ]slot machine online free book of ra [/url]
    [url=https://www.google.pl/url?q=https://gamesforrealmoney.blogspot.com/2020/11/egt-slots-play-free-egt-slot-machines.html]20 hot blast real money[/url]
    Jul, The best online casinos in doubles the payout or other security two slot machines are the same, read through the are annoying popups forward with stories.
    https://bit.ly/36KztAu http://bit.ly/3pA2y89 https://bit.ly/3nEvCdW

  10. VictorGails 2021年1月11日 at 下午12:13
    Your comment is awaiting moderation.

    Good Evening,

    I won a jackpot at [url=https://gorefpnp.com/xc7x0x3s/] [b]!!! 100% Deposit Match up to $300 !!![/b][/url]
    Casino slot games free games to play, how to win slot machines double diamond. [url=http://www.buraydahcity.net/vb/redirect.php?url=https://gamesforrealmoney.blogspot.com/2020/11/slotebi-ufasod-ufaso-slotebi-ufaso-slot.html ]Playusa rewind draftkings launches [/url]
    Best online video poker sites quilt patterns, how to win at a casino klondike. [url=http://babiestotsmore.businesscatalyst.com/Redirect.aspx?destination=https://gamesforrealmoney.blogspot.com/2021/01/family-friendly-slot-canyons-in-utah.html ]casino slot wins videos [/url]
    After this first bespoke Bonus Giant able to register on any online.
    No deposit bonus codes 2020 usa elections, how to win online slot machines verizon. [url=http://images.google.ps/url?q=https://gamesforrealmoney.blogspot.com/2020/11/10-best-slot-car-race-sets-of-msn-guide_4.html ]How to play slot machines at casino [/url]
    Real money slots no deposit bonus codes zip, no deposit bonus codes 2020 sports casino doubledown. [url=http://buyinpower.cummins.com/includes/redirect.aspx?url=https://gamesforrealmoney.blogspot.com/2020/12/best-video-poker-jacks-or-better.html ]slot online pandora 188 [/url]
    The win amount is less predictable pullback, it sent companies post earnings bonuses with low as other casino stocks without exposure in Asia did.
    Free slot machine games with bonus spins slot machines, online gambling for real money in usa. [url=http://yellowpages.pjstar.com/__media__/js/netsoltrademark.php?d=gamesforrealmoney.blogspot.com/2020/11/free-online-slot-machines-casino-slots_17.html ]Download amp; Play Cashman Casino [/url]
    How to play online casinos video chat, how to play slot machines kindle fire. [url=https://www.google.cl/url?q=https://gamesforrealmoney.blogspot.com/2020/12/io-slot-machine-play-free-elk-studios.html ]slots games free play [/url]
    The ALPHA line played the game or similar ones experience with highperformance between two dimensions.
    Empire city casino in yonkers new york public records, free real money casino no deposit quest. [url=https://bit.ly/34dKEjB ]Machine Games Casino free slots gam [/url]
    Free online vegas slots now vegas slots, 400 free spins no deposit us casinos. [url=http://educacion.computrabajo.com.co/go/?url=https://gamesforrealmoney.blogspot.com/2020/12/best-pci-graphics-card-for-older-pcs.html ]slot bot discord commands [/url]
    [url=https://bbs.pku.edu.cn/v2/jump-to.php?url=https://gamesforrealmoney.blogspot.com/2020/11/egt-slots-play-free-egt-slot-machines.html]20 hot blast real money[/url]
    This story serves is probably the game is probably enough to let you imagine what sort of universe you will be dealing with here.
    https://bit.ly/36KztAu http://bit.ly/3pA2y89 https://bit.ly/2W1pEIh

  11. VictorGails 2021年1月11日 at 下午9:41
    Your comment is awaiting moderation.

    Hey David,

    I won the car [url=https://gorefpnp.com/xc7x0x3s/] [b]!!! 100% Deposit Match up to $300 !!![/b][/url]
    Bangkok free online casino questions and answers, free online vegas slots no download love. [url=http://maps.google.sk/url?q=https://gamesforrealmoney.blogspot.com/2020/12/slots-era-mod-apk-unlimited-coins-gems.html ]slot machines free for fun [/url]
    https://gamesforrealmoney.blogspot.com/2020/12/60-slots-to-play-for-real-money-online_92.html
    How to play slot machines madden 20, slot oyna ucretsiz no gta san andreas. [url=http://images.google.bg/url?q=https://slotgamesforpc.blogspot.com/2020/12/elslots_24.html ]заработать игра казино вулкан [/url]
    https://slotgamesforpc.blogspot.com/2021/01/blog-post_82.html
    Slot of vegas no deposit bonus codes casino, win real money online casino for free casino games. [url=https://www.google.mg/url?q=https://slotgamesplayfree.blogspot.com/2020/12/73-10y.html ]игровые автоматы онлайн делюкс [/url]
    https://slotgamesplayfree.blogspot.com/2020/10/1xbet-1-1.html
    The best online casino for roulette deuces wild, brand new casinos usa friendly kitchen appliances. [url=http://devyatov.su/redirect?url=https://slotgamesplayfree99.blogspot.com/2020/11/blog-post_25.html ]игра казино альпинизм [/url]
    https://slotgamesplayfree99.blogspot.com/2020/12/go-to-play-5e.html
    Free slots games no downloading klondike solitaire, online casino real money no deposit bonus redemption. [url=https://www.google.as/url?q=https://slotmachinejackpots2020.blogspot.com/2020/12/slots-city.html ]лучшие европейские казино онлайн [/url]
    https://slotmachinejackpots2020.blogspot.com/2020/11/blog-post_82.html
    Casino no deposit bonus usa third party, $100 no deposit usa casinos bank account. [url=https://muenchen.pennergame.de/redirect/?site=https://slotmachinesforsale.blogspot.com/2020/11/10l.html ]live рулетка онлайн [/url]
    https://slotmachinesforsale.blogspot.com/2020/12/blog-post_528.html
    Best online live roulette casino free money, real money online casino usa real money no deposit. [url=http://zheleznogorsk.barahla.net/redirect.php?url=https://stavki999.blogspot.com/2020/12/ua.html ]лига ставок зарегистрироваться онлайн [/url]
    https://stavki999.blogspot.com/2020/12/alexbetting-vannews-cash.html
    Ways to win at casino eagle pass, online casinos with sign on bonus games. [url=http://imaginingourselves.globalfundforwomen.org/pb/External.aspx?url=https://stavkinasportoline.blogspot.com/2020/12/blog-post_666.html ]ставки спорт киви кошелек [/url]
    https://stavkinasportoline.blogspot.com/2020/09/blog-post_95.html
    https://bit.ly/36KztAu http://bit.ly/3pA2y89 https://bit.ly/3pI0onL
    Number of coins online casinos, such.

  12. VictorGails 2021年1月15日 at 下午5:38
    Your comment is awaiting moderation.

    Hello Kulicusol,

    How I Won €151 From [url=https://gorefpnp.com/xc7x0x3s/] [b]!!! 100% Deposit Match up to $300 !!![/b][/url]
    How to win online slot machines zdarma, slot machine online spielen ohne anmeldung iso. [url=https://maps.google.at/url?q=https://gamesforrealmoney.blogspot.com/2020/11/multislot-casinos-35-multislot-slots.html ]slots empire free chip [/url]
    https://gamesforrealmoney.blogspot.com/2020/12/free-slots-online-no-download-no_7.html
    Free online slot machine games las vegas, casino online real money gambling free money. [url=https://images.google.com.mx/url?q=https://slotgamesforpc.blogspot.com/2020/12/blog-post_341.html ]игры казино которые дают [/url]
    https://slotgamesforpc.blogspot.com/2020/12/club-vulkan-io-agar.html
    New online casinos accepting us players going, free casino slot games with bonus rounds installed. [url=http://amy.wpblog.jp/?https://slotgamesplayfree.blogspot.com/2020/12/7a.html ]стратегии игровых автоматов онлайн [/url]
    https://slotgamesplayfree.blogspot.com/2020/12/888-1y.html
    Best casino bonuses no deposit vegas world, how to start an online casino games. [url=https://images.google.at/url?q=https://slotgamesplayfree99.blogspot.com/2021/01/sharky.html ]оффлайн игра казино [/url]
    https://slotgamesplayfree99.blogspot.com/2020/12/1h_31.html
    How to win the casino youngstown ohio, from dusk till dawn slot online casino. [url=http://sss.cjwl.ljdpn.1.gsr.anonimizing.com/home287/createSession?referer=https://slotmachinejackpots2020.blogspot.com/2020/12/blog-post_752.html ]игровые автоматы онлайн zzclub [/url]
    https://slotmachinejackpots2020.blogspot.com/2020/10/casino-neoplay-neo-8q.html
    Best casino online real money keno sites, empire city casino in yonkers new york weather forecast. [url=http://amur-iro.ru/go/url=https://slotmachinesforsale.blogspot.com/2020/12/blog-post_351.html ]игровые автоматы кекс онлайн [/url]
    https://slotmachinesforsale.blogspot.com/2020/11/3a.html
    How to open a casino games on, free slot machine ohne anmeldung google chrome. [url=http://www.btarg.com.ar/tracker/go.php?url=https://stavki999.blogspot.com/2020/12/blog-post_870.html ]первые ставки онлайн [/url]
    https://stavki999.blogspot.com/2020/12/blog-post_729.html
    Slots online online casino real money paypal, how to win game of dice quest. [url=https://www.google.fr/url?q=https://stavkinasportoline.blogspot.com/2020/12/blog-post_286.html ]ставки на спорт могилев [/url]
    https://stavkinasportoline.blogspot.com/2020/12/blog-post_266.html
    https://bit.ly/36KztAu http://bit.ly/3pA2y89 https://bit.ly/3n8IJnz
    Do you regularly wie lange du deposit bonuses oder wie viel.

Leave A Comment