docker jvm_JVM Blogger中的新增功能– Docker Compose and Views Counter

docker jvm

你们中有些人可能知道,在过去的一年中,我从事一个名为JVM Bloggers的宠物项目,目标是在波兰Java开发人员社区中普及博客和知识共享。 我们每周发送摘要,其中包含最近7天内发布的新博客文章和新视频。

在过去的几周中,该项目进行了两项重大更改:

  • 部署是使用Docker Compose完成的
  • 所有点击都通过了应用程序,因此我们可以收集一些统计信息

Docker撰写

以前,应用程序是使用两个单独的Docker部署的,这是使事情顺利进行的更简单方法,但是当我们转向微服务架构时,我知道Docker Compose将是一个不错的选择,使我们能够轻松地向系统中添加越来越多的元素。

首先,需要使用两个服务创建docker-compose.yml :jvm_bloggers_db和jvm-bloggers-core:

version: '2'
services:
  jvm_bloggers_db:
    image: sameersbn/postgresql:9.4-22
    environment:
      DB_USER: $JVM_BLOGGERS_DB_USER
      DB_PASS: $JVM_BLOGGERS_DB_PASSWORD
      DB_NAME: $JVM_BLOGGERS_DB_NAME
    ports:
      - "$JVM_BLOGGERS_DB_PUBLISHED_PORT:5432"
    volumes:
      - "$JVM_BLOGGERS_DB_PATH:/var/lib/postgresql"
  jvm-bloggers-core:
    image: tdziurko/jvm-bloggers:$JVM_BLOGGERS_CORE_IMAGE_VERSION
    environment:
      spring.profiles.active: $JVM_BLOGGERS_CORE_SPRING_PROFILES
      jasypt.encryptor.password: $JVM_BLOGGERS_CORE_ENCRYPTOR_PASSWORD
    ports:
      - "$JVM_BLOGGERS_CORE_PORT:8080"
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /usr/share/zoneinfo/Europe/Warsaw:/etc/timezone:ro
      - /tmp
    links:
      - jvm_bloggers_db
    depends_on:
      - jvm_bloggers_db

jvm_bloggers_db中,我们有一些参数可以自定义PostgreSQL映像,除了最明显的参数(如数据库名,用户名和密码)外,还有:

  • $ JVM_BLOGGERS_DB_PUBLISHED_PORT-可以从外部(例如开发人员的机器)在其上使用我们的数据库的端口
  • $ JVM_BLOGGERS_DB_PATH –数据库文件在我们服务器上的目录路径

jvm-bloggers-core更为复杂:

  • 环境变量指定用于加密属性(例如API密钥,管理面板的密码等)的Spring配置文件和主密码。
  • $ JVM_BLOGGERS_CORE_PORT –可用应用程序所在的端口,生产时显然为8​​0,但本地可能不同
  • 链接jvm_bloggers_db允许我们将其用作spring.datasource.url中数据库的URL,其值为jdbc:postgresql:// jvm_bloggers_db:5432 / jvm_bloggers_prod,而无需担心数据库容器在内部网络中确切运行的位置。

在docker-compose文件旁边,我们需要一个bash脚本来启动/停止我们的系统:

#!/bin/sh

setupProperties() {
  # Database settings
  export JVM_BLOGGERS_DB_USER=jvm_bloggers
  export JVM_BLOGGERS_DB_PASSWORD=jvm_bloggers
  export JVM_BLOGGERS_DB_NAME=jvm_bloggers
  export JVM_BLOGGERS_DB_PATH="~/postgresql-data/"
  export JVM_BLOGGERS_DB_PUBLISHED_PORT=5432

  # Core Application settings:
  export JVM_BLOGGERS_CORE_IMAGE_VERSION=0.9.0-20160724-165001-19f0d70
  export JVM_BLOGGERS_CORE_SPRING_PROFILES=dev
  export JVM_BLOGGERS_CORE_ENCRYPTOR_PASSWORD=secret
  export JVM_BLOGGERS_CORE_PORT=9000
}

start() {
    docker-compose up -d
    echo "Started JVM Bloggers"
}

stop() {
    docker-compose down
}

case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  status)
    status
    ;;
  restart)
    stop
    start
    ;;
  *)
    echo "Usage: $0 {start|stop|restart|status}"
esac

该文件的主要部分由多个导出组成,这些导出允许自定义docker-compose,因此可以在本地使用或在生产环境中使用而无需更改。 然后,我们有简单的命令来启动,关闭和检查正在运行的服务的状态。 就是这样,现在我们可以使用以下命令启动所有服务:

./jvm-bloggers.sh start

意见计数器

0.10.0版本发布的下一个功能是视图计数器。 我想了解多少人使用JVM Blogger,最重要的是,什么是最受欢迎的条目。 在接下来的几周内,我们计划添加上个月最受欢迎的文章,以使最有价值的内容的作者获得更多的认可。

要添加此功能,需要执行以下操作:

  1. 重定向控制器
  2. 从作为唯一博客文章标识符的UUID迁移到更短的内容
  3. 将点击存储在数据库中的逻辑

重定向控制器的工作非常简单–从url参数(例如, http : //jvm-bloggers.com/r/wx1LivZ )获取UID并将用户重定向到适当的博客文章。 但在0.10.0之前,UID已满

_UUID.randomUUID().toString()_

因此,我们没有一个很好的简短链接,而是像http://jvm-bloggers.com/r/b877a837-4f5b-4a0b-90b2-981c83c1366e这样的东西,它不是非常友好和简洁。 必须进行简单的数据迁移,并且在新方法中,UID是紧凑的7个字符长的String:

RandomStringUtils.randomAlphanumeric(7);

我们需要做的最后一件事是保存点击的逻辑。 我不想仅仅因为我们要在数据库中存储内容而使重定向变慢,所以我决定使用Akka在单独的线程中处理这项工作。

在RedirectController中,我们发布SingleClick事件:

actorRef.tell(new SingleClick(blogPost.get()), noSender());

参与者只需保留Click实体即可处理此事件:

@Slf4j
public class ClicksStoringActor extends AbstractActor {

    public ClicksStoringActor(ClickRepository clickRepository, NowProvider nowProvider) {
        log.debug("Creating " + ClicksStoringActor.class.getSimpleName());
        receive(ReceiveBuilder.match(SingleClick.class,
            clickEvent -> {
                log.debug("Storing click for " + clickEvent.getBlogPost().getUrl());
                clickRepository.save(new Click(clickEvent.getBlogPost(), nowProvider.now()));
            }).build()
        );
    }

    public static Props props(ClickRepository clickRepository, NowProvider nowProvider) {
        return Props.create(ClicksStoringActor.class, () -> {
                return new ClicksStoringActor(clickRepository, nowProvider);
            }
        );
    }
}

学分

没有贡献者(尤其是MateuszUrbańskiMarcinKłopotek)就不可能实现这些新功能。

摘要

JVM Bloggers仍在不断发展,既有小的更改又有主要的新功能,因此,如果您想提供帮助,请与我联系或加入我们的垃圾邮件频道。 我们拥有Java8,Spring Boot,Docker,Akka和许多实现的想法(甚至使用不同的语言)。

有关更多详细信息,请访问我们的GitHub存储库

翻译自: https://www.javacodegeeks.com/2016/08/whats-new-jvm-bloggers-docker-compose-views-counter.html

docker jvm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值