dot 快速的未来即将在您所在的城市举行活动。

加入我们在 Redis 发布会

如何使用 Spring Boot 和 Redis 创建健康生活应用程序

改变身体的坏习惯并不容易。无论是饮食不当、在健身房懈怠,还是完全忽视健身,很大程度上都取决于心态。个人发展是一种趋势,它激励我们中的许多人摆脱坏习惯,将自己转变为新的、更好的人。 

但引发重大变化始于衡量您的进步,以确定您所做的两步是让您更接近目标还是离目标更远。如果没有任何形式的衡量,旅程就会变得没有方向。 

ABettaMe 是一款健康生活应用程序,旨在帮助您保持正轨,它允许您衡量不同的变量,以查看您在实现目标方面取得了多大的进步。通过此应用程序,您可以尝试不同的饮食和锻炼,以查看它们对您健康的影响。 

Redis 被用来简化组件之间的数据传输,并创建一个对用户命令高度响应的应用程序。让我们看看这个应用程序是如何构建的。 

但在我们进一步讨论之前,我们想指出,您可以在 Redis Launchpad 上发现各种类似 ABettaMe 的创新应用程序。 

所以在阅读完这篇文章后,一定要去看看它们!

https://www.youtube.com/embed/8rIUB4B2_gE
  1. 您将构建什么?
  2. 您需要什么?
  3. 架构
  4. 入门
  5. 应用程序的工作原理

1. 您将构建什么?

您将构建一个应用程序,通过允许用户详细地衡量进度,来帮助他们做出重要的生活方式改变。下面,我们将引导您完成实现过程的每个阶段,并介绍您将需要的组件,向您展示如何将此应用程序付诸实践。 

准备开始了吗?

好的,让我们直接开始。 

2. 您需要什么?

该项目由五个不同的组件组成。在每个部分中,我们将重点介绍构建应用程序所需的所有不同技术和工具。 

ABettaMe 仪表板

  • Typescript用作 Javascript 语言的超集,它具有一个单一的开源编译器。
  • React: 用作用于构建用户界面的 Javascript 库。 

ABettaMe 网关

  • Javascript在客户端和服务器端都使用的基于文本的编程语言
  • Spring Cloud Gateway为您提供一个库,用于在 Spring WebFlux 之上构建 API 网关。 

ABettaMe 实验

  • Javascript在客户端和服务器端都使用的基于文本的编程语言。
  • Spring Boot用作开源基于 Java 的框架,用于创建微服务。 
  • RedisJSON用于从 Redis 键存储、更新和获取 JSON 值。
  • Redis 发布/订阅用于事件消息传递,可以向频道上的任何数量的订阅者提供消息。

ABettaMe 推荐

  • C#用作通用多范式编程语言。 
  • .NET 5用作统一平台,使用单个基本库创建任何类型的 .Net 应用程序。 
  • RedisJSON用于从 Redis 键存储、更新和获取 JSON 值。
  • Redis 发布/订阅用于事件消息传递,可以向频道上的任何数量的订阅者提供消息。

ABettaMe 合同

Google Protocol Buffers用作 Google 的语言中立、平台中立的扩展机制,用于序列化结构化数据。

3. 架构

  • 前端首先通知后端任何新的指标,这些指标保存在 RedisJSON 存储中。 
  • 新的指标在 Redis 发布/订阅模块中发布。 
  • 推荐微服务分析数据并执行显著性检验。 
  • 然后,用户可以确定这些更改是否对他们期望的指标产生了影响。 

4. 入门

步骤 1:克隆存储库 

git clone: https://github.com/redis-developer/abetta-ux

步骤 2. 检查服务

打开 docker-compose 文件,该文件指定构建此应用程序所需的各种服务

version: '3.8'
services:
  abetta-xp:
    container_name: abetta-xp
    image: abettame/abetta-xp:local
  abetta-gateway:
    container_name: abetta-gateway
    image: abettame/abetta-gateway:local
    ports:
      - 8080:8080
  abetta-rec:
    container_name: abetta-rec
    image: abettame/abetta-rec:local
  abetta-portal:
    container_name: abetta-portal
    image: abettame/abetta-portal:local
    ports:
      - 3000:3000

步骤 3:启动 Docker

使用以下命令启动 Docker

docker-compose up -d
docker-compose ps
NAME                COMMAND                  SERVICE             STATUS              PORTS
abetta-gateway      "sh -c 'java -Dserve…"   abetta-gateway      running             0.0.0.0:8080->8080/tcp
abetta-portal       "docker-entrypoint.s…"   abetta-portal       running             0.0.0.0:3000->3000/tcp
abetta-rec          "/bin/sh -c 'ASPNETC…"   abetta-rec          running
abetta-xp           "sh -c 'java -Dserve…"   abetta-xp           running
ajeetraina@Ajeets-MacBook-Pro abetta-ux %

接下来,打开浏览器并输入以下链接:https://#:8080/

5. 应用程序的工作原理

让我们深入探讨构建此应用程序的每个模块。 

ABettaMe 仪表板

用于管理现有实验或记录新实验的 UI 界面。

使用的技术:TypeScript、React

以下 Dockerfile 用于构建 UX Docker 镜像 -

# pull official base image
FROM node:13.12.0-alpine

# set working directory
WORKDIR /app

# add `/app/node_modules/.bin` to $PATH
ENV PATH /app/node_modules/.bin:$PATH

# install app dependencies
COPY package.json ./
COPY package-lock.json ./
RUN npm install --silent
RUN npm install react-scripts@3.4.1 -g --silent

# add app
COPY . ./

# start app
CMD ["npm", "start"]

ABettaMe 网关

应用程序网关,将流量路由到适当的下游服务。

使用的技术:Java、Spring Cloud GatewayRepo 链接:abetta-gateway

FROM maven:3-jdk-11

ADD . /abetta-gateway
WORKDIR /abetta-gateway

RUN ls -l
RUN mvn clean install -DskipTests

FROM openjdk:11.0-jre-slim

VOLUME /tmp
COPY --from=0 /abetta-gateway/target/abetta-gateway*.jar app.jar

CMD [ "sh", "-c", "java -Dserver.port=$PORT -Xmx300m -Xss512k -XX:CICompilerCount=2 -Dfile.encoding=UTF-8 -XX:+UseContainerSupport -Djava.security.egd=file:/dev/./urandom -Dspring.profiles.active=heroku -jar /app.jar" ]

文件:https://github.com/ABettaMe/abetta-gateway/blob/main/build-image.sh 

build-image.sh 脚本用于构建 AbettaMe 网关。

mvn clean package
docker build -t abettame/abetta-gateway:latest .
docker push abettame/abetta-gateway:latest

ABettaMe 推荐

推荐服务,分析实验并执行统计显著性检验。

使用的技术:C#、.NET 5、RedisJSON、Redis 发布/订阅

Repo 链接:abetta-rec

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS buildWORKDIR /DockerSource
COPY Recommendations/bin/Release/net5.0/. .
# For local uncomment this and comment line 8# ENTRYPOINT ["dotnet", "Recommendations.dll"]CMD ASPNETCORE_URLS=http://*:$PORT dotnet Recommendations.dll

文件:https://github.com/ABettaMe/abetta-rec/blob/main/heroku-release.sh

docker build -t abetta-rec .heroku container:push -a abetta-rec webheroku container:release -a abetta-rec web

ABettaMe 合同

存储库包含所有不同服务之间共享的合同。

使用的技术:Google Protocol Buffers

Repo 链接:abetta-contract

文件:https://github.com/ABettaMe/abetta-contract/blob/main/build.sh

mkdir java-out csharp-out
protoc --proto_path=. \       --java_out=./java-out \   --csharp_out=./csharp-out \       *.proto

执行实验

这是应用程序中最重要的一方面之一,您可以在其中测试新事物,并查看不同的更改对您的生活产生的影响。首先,点击仪表板上的“创建新实验”图标。

然后,您需要在给定的字段中填写有关您的实验的一些信息,包括

  • 实验名称
  • 指标:确定您将要衡量的变量。例如,如果您试图跟踪减肥,那么您将选择“体重”。
  • 对照:提供有关您将遵循的策略以实现目标的详细信息。 

治疗:插入有关您将采取哪些策略来执行您的策略的信息。

记录结果

在仪表板上,您将看到您的实验概述。点击“添加指标”以记录您的最新结果。然后,您将被带到一个新页面,您将需要填写一些字段,包括日期、指标和值(见下文)。

监控您的进度

在屏幕的左侧,您将看到列出的不同实验。在点击要查看的实验后,您将看到一个图表,该图表将直观地显示您的进度。 

该应用程序还将列出任何已达成的里程碑,这些里程碑代表您朝着目标前进的程度(见下文)。

结论:使用 Redis 快速衡量您的进度

衡量进度是个人发展的一个基本方面。它让您可以发现您是前进两步、后退两步,还是完全停滞不前。但对于任何衡量系统来说,要有效,它需要快速、准确且易于访问。 

Redis 的高级数据处理能力保证了高度响应的应用程序,用户可以在没有任何滞后、冻结或延迟的情况下实时与它交互。新的指标保存在 RedisJSON 存储中,并通过 RedisPubSub 模块以超高效率发布,为用户提供无缝的应用程序体验。 

要详细了解这个应用程序是如何制作的,请确保观看此 YouTube 视频。如果您喜欢这篇文章,请访问 Redis Launchpad,您可以在那里访问更多对日常生活产生影响的令人兴奋的应用程序。

我们有实时车辆跟踪系统、一个加速献血过程的应用程序等等!

去看看。看看。玩得开心点,Redis。

谁构建了这个应用程序?

Antonis Anagnostou

Antonis 是一位创新型软件工程师,目前将他的专业知识投入到 Spotify。如果您想了解他的所有项目,请确保在 GitHub 上关注他