云中的Micronaut:Microservices中的MongoDB简介


Micronaut是一个基于JVM的开源框架,用于构建全栈,模块化,易于测试的微服务和无服务器应用程序。

与基于反射的IoC框架使用Micronaut为代码中的每个字段,方法和构造函数加载和缓存反射数据不同,使用Micronaut,您的应用程序启动时间和内存消耗不受代码库大小的限制。内置了Micronaut的云支持,包括对常见发现服务,分布式跟踪工具和云运行时的支持。

这个在云中的Micronaut教程中,我们将使用MongoDB数据库部署应用程序。

第一步是创建应用程序本身,Micronaut拥有适当的文档。您具有开始代码链接,您可以在其中定义编写应用程序所需的依赖项。在这一点上,我们需要MongoDB同步依赖项。

如果您想在本地运行MongoDB,一个不错的选择可能是Docker,您可以使用以下命令运行它:

docker run -d --name mongodb-instance -p 27017:27017 mongo

第一步是设置数据库配置。我们需要将应用程序配置为在本地运行,并使其能够覆盖生产环境。

micronaut:
  application:
    name: mongodb
mongodb.uri: ${MONGO_URL:`mongodb://localhost:27017/database`}

基础结构代码已准备就绪;下一步是创建应用程序本身。在此示例中,我们将创建一个小的rest应用程序来存储人员。因此,我们将创建一个Person实体。

import io.micronaut.core.annotation.Introspected;
import javax.validation.constraints.NotBlank;
@Introspected
public class Person {
    @NotBlank
    private String name;
    @NotBlank
    private String city;
    @NotBlank
    private String country;
   //getter and setter
}

最后一步是创建一个资源,客户端可以在其中进行请求,然后再进行CRUD。

import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.model.Filters;
import io.micronaut.http.HttpResponse;
import io.micronaut.http.annotation.Body;
import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Delete;
import io.micronaut.http.annotation.Get;
import io.micronaut.http.annotation.Post;
import org.bson.conversions.Bson;
import javax.validation.Valid;
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;

@Controller("/people")
public class PersonController {

    private final MongoClient mongoClient;

    public PersonController(MongoClient mongoClient) {

        this.mongoClient = mongoClient;
    }

    @Get("/{name}")
    public Person show(String name) {
        Bson filter = Filters.eq("name", name);
        return getCollection().find(filter).first();
    }

    @Get
    public Iterable<Person> findAll() {
        final FindIterable<Person> iterable = getCollection().find();
        return StreamSupport.stream(iterable.spliterator(), false)
                .collect(Collectors.toList());
    }

    @Post
    public HttpResponse<Person> save(@Body @Valid Person person) {
        getCollection().insertOne(person);
        return HttpResponse.created(person);
    }

    @Delete("/{name}")
    public HttpResponse delete(String name) {
        Bson filter = Filters.eq("name", name);
        getCollection().deleteOne(filter);
        return HttpResponse.noContent();
    }

    private MongoCollection<Person> getCollection() {
        return mongoClient
                .getDatabase("main")
                .getCollection("people", Person.class);
    }
}

该应用程序已准备就绪,可以运行该应用程序的测试。下一步是使用Platform.sh迁移到云中。

要将您的应用程序移动到云中,简要地说,您需要三个文件:

"https://{default}/":
  type: upstream
  upstream: "app:http"
"https://www.{default}/":
  type: redirect
  to: "https://{default}/"

Platform.sh允许您完全定义和配置要在项目上使用的拓扑和服务。

mongodb:
  type: mongodb:3.6
  disk: 1024

一个容器(.platform.app.yaml)。您可以通过一个配置文件控制应用程序以及在Platform.sh上构建和部署应用程序的方式。在此应用程序上,我们允许PostgreSQL数据库与应用程序之间的关系。因此,我们的应用程序容器将有权查看PostgreSQL容器。此外,我们还将覆盖要在云中使用的本地配置覆盖到Platform.sh。

name: app
type: "java:11"
disk: 1024
hooks:
    build: mvn clean package -DskipTests
relationships:
    mongodb: 'mongodb:mongodb'
web:
    commands:
        start: java -jar $JAVA_OPTS target/mongodb-0.1.jar

为了简化应用程序文件,我们将在 文件中使用Shell变量.environment。

export MONGO_PORT=`echo $PLATFORM_RELATIONSHIPS|base64 -d|json_pp|jq -r ".mongodb[0].port"`
export MONGO_HOST=`echo $PLATFORM_RELATIONSHIPS|base64 -d|json_pp|jq -r ".mongodb[0].host"`
export MONGO_PASSWORD=`echo $PLATFORM_RELATIONSHIPS|base64 -d|json_pp|jq -r ".mongodb[0].password"`
export MONGO_USER=`echo $PLATFORM_RELATIONSHIPS|base64 -d|json_pp|jq -r ".mongodb[0].username"`
export MONGO_DATABASE=`echo $PLATFORM_RELATIONSHIPS|base64 -d|json_pp|jq -r ".mongodb[0].path"`
export MONGO_URL=mongodb://${MONGO_USER}:${MONGO_PASSWORD}@${MONGO_HOST}:${MONGO_PORT}/${MONGO_DATABASE}
export JAVA_MEMORY=-Xmx$(jq .info.limits.memory /run/config.json)m
export JAVA_OPTS="$JAVA_MEMORY -XX:+ExitOnOutOfMemoryError"

现在该应用程序已准备就绪,是时候使用以下步骤通过Platform.sh将其移动到云中了:

  • 创建一个新的免费试用帐户。
  • 使用新的用户名和密码注册,或使用当前的GitHub,Bitbucket或Google帐户登录。如果您使用第三方登录,则以后可以为Platform.sh帐户设置密码。
  • 选择您的网站应居住的世界区域。
  • 选择空白模板。


原文链接:http://codingdict.com