溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Micronaut框架是什么及怎么使用

發(fā)布時間:2022-02-28 16:26:31 來源:億速云 閱讀:170 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“Micronaut框架是什么及怎么使用”的相關(guān)知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Micronaut框架是什么及怎么使用”文章能幫助大家解決問題。

    什么是Micronaut

    Micronaut是一個基于JVM的框架,用于構(gòu)建輕量級、模塊化的應(yīng)用程序。Micronaut是由創(chuàng)建Grails的同一家公司OCI開發(fā)的最新框架,旨在使創(chuàng)建微服務(wù)變得快速和簡單。

    雖然Micronaut包含一些類似于Spring等現(xiàn)有框架的特性,但它也有一些新特性使它與眾不同。通過對Java、Groovy和Kotlin的支持,它提供了多種創(chuàng)建應(yīng)用程序的方法。

    主要特點

    Micronaut最令人興奮的特性之一是它的編譯時依賴注入機制。大多數(shù)框架使用反射和代理在運行時執(zhí)行依賴注入。然而,Micronaut在編譯時構(gòu)建其依賴注入數(shù)據(jù)。結(jié)果是更快的應(yīng)用程序啟動和更小的內(nèi)存占用。

    另一個特性是它對客戶端和服務(wù)器的反應(yīng)式編程的一流支持。由于RxJava和projectreactor都受支持,所以特定的反應(yīng)式實現(xiàn)的選擇權(quán)留給了開發(fā)人員。

    Micronaut還具有一些特性,使其成為開發(fā)云本地應(yīng)用程序的優(yōu)秀框架。它支持多種服務(wù)發(fā)現(xiàn)工具,如Eureka和consur,還可以與不同的分布式跟蹤系統(tǒng)(如Zipkin和Jaeger)一起使用。

    它還提供了對創(chuàng)建AWS lambda函數(shù)的支持,使得創(chuàng)建Serverless無服務(wù)器應(yīng)用程序變得容易。

    入門

    最簡單的入門方法是使用SDKMAN:

    > sdk install micronaut 1.0.0.RC2

    這將安裝我們構(gòu)建、測試和部署Micronaut應(yīng)用程序所需的所有二進制文件。它還提供Micronaut CLI工具,使我們能夠輕松地啟動新項目。

    在下面的部分中,我們將介紹框架的一些特性。

    依賴注入

    如前所述,Micronaut在編譯時處理依賴注入,這與大多數(shù)IoC容器不同。

    但是,它仍然完全支持JSR-330注釋,因此使用bean與其他IoC框架類似。

    為了將bean自動連接到我們的代碼中,我們使用@Inject:

    @Inject
    private EmployeeService service;

    @Inject注釋的工作方式與@Autowired類似,可以用于字段、方法、構(gòu)造函數(shù)和參數(shù)。

    默認(rèn)情況下,所有bean的作用域都是一個原型。我們可以使用@singleton快速創(chuàng)建單例bean。如果多個類實現(xiàn)相同的bean接口,@Primary可以用來消除它們之間的沖突:

    @Primary
    @Singleton
    public class BlueCar implements Car {}

    當(dāng)bean是可選的時,可以使用@Requires注釋,或者僅當(dāng)滿足某些條件時才執(zhí)行自動連接。

    在這方面,它的行為非常類似于Spring Boot@Conditional注解:

    @Singleton
    @Requires(beans = DataSource.class)
    @Requires(property = "enabled")
    @Requires(missingBeans = EmployeeService)
    @Requires(sdk = Sdk.JAVA, value = "1.8")
    public class JdbcEmployeeService implements EmployeeService {}

    構(gòu)建HTTP服務(wù)器

    現(xiàn)在讓我們看看如何創(chuàng)建一個簡單的HTTP服務(wù)器應(yīng)用程序。首先,我們將使用SDKMAN創(chuàng)建一個項目:

    > mn create-app hello-world-server -build maven

    這將在名為helloworld server的目錄中使用Maven創(chuàng)建一個新的Java項目。在這個目錄中,我們將找到主要的應(yīng)用程序源代碼、Maven POM文件和項目的其他支持文件。

    默認(rèn)應(yīng)用程序非常簡單:

    public class ServerApplication {
        public static void main(String[] args) {
            Micronaut.run(ServerApplication.class);
        }
    }

    阻塞HTTP

    就其本身而言,這個應(yīng)用程序不會有太大的作用。讓我們添加一個具有兩個端點的控制器。兩者都將返回問候語,但其中一個將使用GET HTTP動詞,另一個將使用POST:

    @Controller("/greet")
    public class GreetController {
    
        @Inject
        private GreetingService greetingService;
    
        @Get("/{name}")
        public String greet(String name) {
            return greetingService.getGreeting() + name;
        }
    
        @Post(value = "/{name}", consumes = MediaType.TEXT_PLAIN)
        public String setGreeting(@Body String name) {
            return greetingService.getGreeting() + name;
        }
    }

    反應(yīng)式IO

    默認(rèn)情況下,Micronaut將使用傳統(tǒng)的阻塞I/O實現(xiàn)這些端點。但是,我們可以通過將返回類型更改為任何反應(yīng)性非阻塞類型來快速實現(xiàn)非阻塞端點。

    例如,對于RxJava,我們可以使用Observable。同樣,在使用Reactor時,我們可以返回Mono或Flux數(shù)據(jù)類型:

    @Get("/{name}")
    public Mono<String> greet(String name) {
        return Mono.just(greetingService.getGreeting() + name);
    }

    對于阻塞和非阻塞端點,Netty都是用于處理HTTP請求的底層服務(wù)器。

    通常,請求在啟動時創(chuàng)建的主I/O線程池中處理,使它們阻塞。

    但是,當(dāng)從控制器端點返回非阻塞數(shù)據(jù)類型時,Micronaut使用Netty事件循環(huán)線程,使整個請求成為非阻塞的。

    構(gòu)建HTTP客戶端

    現(xiàn)在讓我們構(gòu)建一個客戶機來使用剛剛創(chuàng)建的端點。Micronaut提供兩種創(chuàng)建HTTP客戶端的方法:

    • 聲明性HTTP客戶端

    • 可編程的HTTP客戶機

    聲明性HTTP客戶端

    第一種也是最快的創(chuàng)建方法是使用聲明性方法:

    @Client("/greet")
    public interface GreetingClient {
        @Get("/{name}")
        String greet(String name);
    }

    注意我們沒有實現(xiàn)任何代碼來調(diào)用我們的服務(wù)。相反,Micronaut理解如何從我們提供的方法簽名和注釋調(diào)用服務(wù)。

    為了測試這個客戶機,我們可以創(chuàng)建一個JUnit測試,它使用嵌入式服務(wù)器API來運行我們服務(wù)器的嵌入式實例:

    public class GreetingClientTest {
        private EmbeddedServer server;
        private GreetingClient client;
    
        @Before
        public void setup() {
            server = ApplicationContext.run(EmbeddedServer.class);
            client = server.getApplicationContext().getBean(GreetingClient.class);
        }
    
        @After
        public void cleanup() {
            server.stop();
        }
    
        @Test
        public void testGreeting() {
            assertEquals(client.greet("Mike"), "Hello Mike");
        }
    }

    編程HTTP客戶端

    如果我們需要對其行為和實現(xiàn)進行更多的控制,我們還可以選擇編寫更傳統(tǒng)的客戶端:

    @Singleton
    public class ConcreteGreetingClient {
       private RxHttpClient httpClient;
    
       public ConcreteGreetingClient(@Client("/") RxHttpClient httpClient) {
          this.httpClient = httpClient;
       }
    
       public String greet(String name) {
          HttpRequest<String> req = HttpRequest.GET("/greet/" + name);
          return httpClient.retrieve(req).blockingFirst();
       }
    
       public Single<String> greetAsync(String name) {
          HttpRequest<String> req = HttpRequest.GET("/async/greet/" + name);
          return httpClient.retrieve(req).first("An error as occurred");
       }
    }

    默認(rèn)的HTTP客戶機使用RxJava,因此可以輕松地處理阻塞或非阻塞調(diào)用。

    Micronaut客戶端

    當(dāng)我們使用Micronaut CLI工具創(chuàng)建示例項目時,我們已經(jīng)看到了它的實際應(yīng)用。

    在我們的例子中,我們創(chuàng)建了一個獨立的應(yīng)用程序,但它還有其他一些功能。

    聯(lián)合項目

    在Micronaut中,聯(lián)合只是一組位于同一目錄下的獨立應(yīng)用程序。通過使用聯(lián)邦,我們可以輕松地將它們管理在一起,并確保它們獲得相同的默認(rèn)值和設(shè)置。

    當(dāng)我們使用CLI工具生成聯(lián)合體時,它采用與create app命令相同的參數(shù)。它將創(chuàng)建一個頂級的項目結(jié)構(gòu),每個獨立的應(yīng)用程序?qū)⒃谄渥幽夸浿袆?chuàng)建。

    特征

    創(chuàng)建獨立應(yīng)用程序或聯(lián)合時,我們可以決定應(yīng)用程序需要哪些功能。這有助于確保項目中包含最小的依賴項集。

    我們使用-features參數(shù)指定特性,并提供以逗號分隔的特性名稱列表。

    我們可以通過運行以下命令找到可用功能的列表:

    > mn profile-info service
    
    Provided Features:
    --------------------
    * annotation-api - Adds Java annotation API
    * config-consul - Adds support for Distributed Configuration with Consul
    * discovery-consul - Adds support for Service Discovery with Consul
    * discovery-eureka - Adds support for Service Discovery with Eureka
    * groovy - Creates a Groovy application
    [...] More features available

    現(xiàn)有項目

    我們還可以使用CLI工具來修改現(xiàn)有的項目。使我們能夠創(chuàng)建bean、客戶機、控制器等等。當(dāng)我們在現(xiàn)有項目中運行mn命令時,將有一組新的命令可用:

    > mn help
    | Command Name         Command Description
    -----------------------------------------------
    create-bean            Creates a singleton bean
    create-client          Creates a client interface
    create-controller      Creates a controller and associated test
    create-job             Creates a job with scheduled method

    關(guān)于“Micronaut框架是什么及怎么使用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI