From a575329ce5a1e97b11fedf25c830970c5a91f103 Mon Sep 17 00:00:00 2001 From: Hanee Park Date: Wed, 21 Jun 2023 14:55:04 +0900 Subject: [PATCH] Add the Thrift tutorial (#4865) Motivation: - Provide a tutorial for beginners who wants to use Apache Thrift with Armeria Modifications: - Add a tutorial for writing an Apache Thrift service with Armeria Result: - Adds the tutorial in the "THRIFT SERVICE" menu in armeria.dev site. Co-authored-by: jrhee17 --- .../server/blog/thrift/BlogClient.java | 59 +++++ .../server/blog/thrift/BlogServiceImpl.java | 2 +- .../server/blog/thrift/BlogServiceTest.java | 93 +++---- site/src/components/code-block.tsx | 2 + ...al_blogservice_thrift_docservice_start.png | Bin 0 -> 95895 bytes .../tutorial_blogservice_thrift_reqex.png | Bin 0 -> 27517 bytes .../tutorial_blogservice_thrift_return.png | Bin 0 -> 56276 bytes .../tutorials/thrift/blog/create-service.mdx | 86 +++++++ .../thrift/blog/define-service-methods.mdx | 146 +++++++++++ .../thrift/blog/implement-create.mdx | 166 ++++++++++++ .../thrift/blog/implement-delete.mdx | 197 ++++++++++++++ .../tutorials/thrift/blog/implement-read.mdx | 242 ++++++++++++++++++ .../thrift/blog/implement-update.mdx | 176 +++++++++++++ .../src/pages/tutorials/thrift/blog/index.mdx | 134 ++++++++++ .../tutorials/thrift/blog/run-server.mdx | 170 ++++++++++++ site/src/pages/tutorials/toc.json | 13 +- 16 files changed, 1438 insertions(+), 48 deletions(-) create mode 100644 examples/tutorials/thrift/src/main/java/example/armeria/server/blog/thrift/BlogClient.java create mode 100644 site/src/images/tutorial_blogservice_thrift_docservice_start.png create mode 100644 site/src/images/tutorial_blogservice_thrift_reqex.png create mode 100644 site/src/images/tutorial_blogservice_thrift_return.png create mode 100644 site/src/pages/tutorials/thrift/blog/create-service.mdx create mode 100644 site/src/pages/tutorials/thrift/blog/define-service-methods.mdx create mode 100644 site/src/pages/tutorials/thrift/blog/implement-create.mdx create mode 100644 site/src/pages/tutorials/thrift/blog/implement-delete.mdx create mode 100644 site/src/pages/tutorials/thrift/blog/implement-read.mdx create mode 100644 site/src/pages/tutorials/thrift/blog/implement-update.mdx create mode 100644 site/src/pages/tutorials/thrift/blog/index.mdx create mode 100644 site/src/pages/tutorials/thrift/blog/run-server.mdx diff --git a/examples/tutorials/thrift/src/main/java/example/armeria/server/blog/thrift/BlogClient.java b/examples/tutorials/thrift/src/main/java/example/armeria/server/blog/thrift/BlogClient.java new file mode 100644 index 00000000000..7c853087b89 --- /dev/null +++ b/examples/tutorials/thrift/src/main/java/example/armeria/server/blog/thrift/BlogClient.java @@ -0,0 +1,59 @@ +package example.armeria.server.blog.thrift; + +import java.net.URI; +import java.util.List; + +import org.apache.thrift.TException; + +import com.linecorp.armeria.client.logging.LoggingClient; +import com.linecorp.armeria.client.thrift.ThriftClients; + +import example.armeria.blog.thrift.BlogPost; +import example.armeria.blog.thrift.BlogService; +import example.armeria.blog.thrift.CreateBlogPostRequest; +import example.armeria.blog.thrift.DeleteBlogPostRequest; +import example.armeria.blog.thrift.GetBlogPostRequest; +import example.armeria.blog.thrift.ListBlogPostsRequest; +import example.armeria.blog.thrift.UpdateBlogPostRequest; + +public final class BlogClient { + + private final BlogService.Iface blogService; + + BlogClient(URI uri, String path) { + blogService = ThriftClients.builder(uri) + .path(path) + .decorator(LoggingClient.newDecorator()) + .build(BlogService.Iface.class); + } + + BlogPost createBlogPost(String title, String content) throws TException { + final CreateBlogPostRequest request = + new CreateBlogPostRequest().setTitle(title) + .setContent(content); + return blogService.createBlogPost(request); + } + + BlogPost getBlogPost(int id) throws TException { + final GetBlogPostRequest request = + new GetBlogPostRequest().setId(id); + return blogService.getBlogPost(request); + } + + List listBlogPosts(boolean descending) throws TException { + return blogService.listBlogPosts(new ListBlogPostsRequest().setDescending(descending)) + .getBlogs(); + } + + BlogPost updateBlogPost(int id, String newTitle, String newContent) throws TException { + final UpdateBlogPostRequest request = new UpdateBlogPostRequest().setId(id) + .setTitle(newTitle) + .setContent(newContent); + return blogService.updateBlogPost(request); + } + + void deleteBlogPost(int id) throws TException { + final DeleteBlogPostRequest request = new DeleteBlogPostRequest().setId(id); + blogService.deleteBlogPost(request); + } +} diff --git a/examples/tutorials/thrift/src/main/java/example/armeria/server/blog/thrift/BlogServiceImpl.java b/examples/tutorials/thrift/src/main/java/example/armeria/server/blog/thrift/BlogServiceImpl.java index 01294adb394..4f3a5d316c6 100644 --- a/examples/tutorials/thrift/src/main/java/example/armeria/server/blog/thrift/BlogServiceImpl.java +++ b/examples/tutorials/thrift/src/main/java/example/armeria/server/blog/thrift/BlogServiceImpl.java @@ -79,7 +79,7 @@ public void updateBlogPost(UpdateBlogPostRequest request, AsyncMethodCallback { - client.getBlogPost(new GetBlogPostRequest().setId(Integer.MAX_VALUE)); + client.getBlogPost(Integer.MAX_VALUE); }); assertThat(exception).isInstanceOf(BlogNotFoundException.class) .extracting("reason") @@ -89,15 +71,10 @@ void getInvalidBlogPost() { @Test @Order(4) void listBlogPosts() throws TException { - final CreateBlogPostRequest newBlogPost = new CreateBlogPostRequest() - .setTitle("My second blog") - .setContent("Armeria is awesome!"); - client.createBlogPost(newBlogPost); - final ListBlogPostsResponse - response = client.listBlogPosts(new ListBlogPostsRequest() - .setDescending(false)); - - final List blogs = response.getBlogs(); + final BlogClient client = new BlogClient(server.httpUri(), "/thrift"); + client.createBlogPost("My second blog", "Armeria is awesome!"); + + final List blogs = client.listBlogPosts(false); assertThat(blogs).hasSize(2); final BlogPost firstBlog = blogs.get(0); assertThat(firstBlog.getTitle()).isEqualTo("My first blog"); @@ -106,26 +83,54 @@ void listBlogPosts() throws TException { final BlogPost secondBlog = blogs.get(1); assertThat(secondBlog.getTitle()).isEqualTo("My second blog"); assertThat(secondBlog.getContent()).isEqualTo("Armeria is awesome!"); + System.out.println(blogs); } @Test @Order(5) void updateBlogPosts() throws TException { - final UpdateBlogPostRequest request = new UpdateBlogPostRequest() - .setId(0) - .setTitle("My first blog") - .setContent("Hello awesome Armeria!"); - final BlogPost updated = client.updateBlogPost(request); + final BlogClient client = new BlogClient(server.httpUri(), "/thrift"); + final BlogPost updated = client.updateBlogPost(0, "My first blog", "Hello awesome Armeria!"); assertThat(updated.getId()).isZero(); assertThat(updated.getTitle()).isEqualTo("My first blog"); assertThat(updated.getContent()).isEqualTo("Hello awesome Armeria!"); + System.out.println(updated); } @Test @Order(6) - void badRequestExceptionHandlerWhenTryingDeleteMissingBlogPost() { + void updateInvalidBlogPost() { + final BlogClient client = new BlogClient(server.httpUri(), "/thrift"); + final Throwable exception = catchThrowable(() -> { + final BlogPost updated = client.updateBlogPost(Integer.MAX_VALUE, "My first blog", + "Hello awesome Armeria!"); + }); + assertThat(exception).isInstanceOf(BlogNotFoundException.class) + .extracting("reason") + .asString() + .isEqualTo("The blog post does not exist. ID: " + Integer.MAX_VALUE); + } + + @Test + @Order(7) + void deleteBlogPost() throws TException { + final BlogClient client = new BlogClient(server.httpUri(), "/thrift"); + client.deleteBlogPost(1); + final Throwable exception = catchThrowable(() -> { + client.getBlogPost(1); + }); + assertThat(exception).isInstanceOf(BlogNotFoundException.class) + .extracting("reason") + .asString() + .isEqualTo("The blog post does not exist. ID: 1"); + } + + @Test + @Order(8) + void deleteInvalidBlogPost() { + final BlogClient client = new BlogClient(server.httpUri(), "/thrift"); final Throwable exception = catchThrowable(() -> { - client.deleteBlogPost(new DeleteBlogPostRequest().setId(100)); + client.deleteBlogPost(100); }); assertThat(exception).isInstanceOf(BlogNotFoundException.class) .extracting("reason") diff --git a/site/src/components/code-block.tsx b/site/src/components/code-block.tsx index add17492e27..50edb79928b 100644 --- a/site/src/components/code-block.tsx +++ b/site/src/components/code-block.tsx @@ -13,6 +13,7 @@ import prismTheme from 'react-syntax-highlighter/dist/esm/styles/prism/cb'; // Prism syntaxes /* eslint-disable import/no-extraneous-dependencies */ import bash from 'react-syntax-highlighter/dist/esm/languages/prism/bash'; +import cpp from 'react-syntax-highlighter/dist/esm/languages/prism/cpp'; import graphql from 'react-syntax-highlighter/dist/esm/languages/prism/graphql'; import groovy from 'react-syntax-highlighter/dist/esm/languages/prism/groovy'; import http from 'react-syntax-highlighter/dist/esm/languages/prism/http'; @@ -40,6 +41,7 @@ none.aliases = [] as string[]; const supportedLanguages = { bash, + cpp, graphql, groovy, http, diff --git a/site/src/images/tutorial_blogservice_thrift_docservice_start.png b/site/src/images/tutorial_blogservice_thrift_docservice_start.png new file mode 100644 index 0000000000000000000000000000000000000000..f14703c64e7f39fabc32474b6a7c155a2d736007 GIT binary patch literal 95895 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�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 literal 0 HcmV?d00001 diff --git a/site/src/images/tutorial_blogservice_thrift_return.png b/site/src/images/tutorial_blogservice_thrift_return.png new file mode 100644 index 0000000000000000000000000000000000000000..54bf58e280796e7353482d50f59dd653565559c3 GIT binary patch literal 56276 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 GGywn@@rld; literal 0 HcmV?d00001 diff --git a/site/src/pages/tutorials/thrift/blog/create-service.mdx b/site/src/pages/tutorials/thrift/blog/create-service.mdx new file mode 100644 index 00000000000..6b3e25a17e8 --- /dev/null +++ b/site/src/pages/tutorials/thrift/blog/create-service.mdx @@ -0,0 +1,86 @@ +--- +menuTitle: "Create a service" +order: 1 +category: thrift +type: step +targetLang: java +--- + +# Creating a service + +As the first step of the tutorial, we'll create a simple service with a dummy method in Thrift and implement the service in Java. + + + +## What you need + +No preparation is required for this step. Do check that you've prepared the [prerequisites](/tutorials/thrift/blog/#prerequisites). + +## 1. Create a thrift file + +Create a thrift file, `blog.thrift` in the `{project_root}/src/main/thrift` folder as follows. +In the thrift file, let's define the `BlogService` service with the `hello()` method. + +```cpp filename=blog.thrift +namespace java example.armeria.blog.thrift + +service BlogService { + string hello() +} +``` + + + +See [Sample service structure](/tutorials/thrift/blog#sample-service-structure) for the overall folder structure. + + + +## 2. Compile the thrift file + +Compile the `blog.thrift` file to generate Java code. +You can refer to the full [build.gradle](https://github.com/line/armeria-examples/tree/main/tutorials/thrift/build.gradle) file for generating code with [Gradle Thrift Plugin](https://github.com/jruyi/thrift-gradle-plugin). + +```bash +./gradlew compileThrift +``` + +You'll see the generated Java code in the `{project_root}/build/generated-sources/thrift/gen-java/example/armeria/blog/thrift/` folder. + +## 3. Implement the service + +Now, let's implement the service in Java. + +1. Create a file, `BlogServiceImpl.java`. +2. Declare the `BlogServiceImpl` class implementing the `BlogService` service we defined earlier in Thrift. + ```java filename=BlogServiceImpl.java + package example.armeria.server.blog.thrift; + + import example.armeria.blog.thrift.BlogService; + + public class BlogServiceImpl implements BlogService.AsyncIface {} + ``` +3. In the `BlogServiceImpl` class, override the `hello()` method, a dummy method for temporary use to test the connection between server and client. + ```java filename=BlogServiceImpl.java + import org.apache.thrift.async.AsyncMethodCallback; + ... + @Override + public void hello(AsyncMethodCallback resultHandler) { + resultHandler.onComplete("Hello, Armeria!"); + } + ``` + + + +Although here we implement the asynchronous interface `BlogService.AsyncIface`, note that implementing the synchronous interface `BlogService.Iface` isn't very different. +See [Running a Thrift service](/docs/server-thrift) for more information. + + + +## What's next + +In this step, we've created a simple service with a dummy method. + +Next, at [Step 2. Run a server](/tutorials/thrift/blog/run-server), we'll create and run a server with the service we've created. +Also, we'll run a client to make a call to the service. + + diff --git a/site/src/pages/tutorials/thrift/blog/define-service-methods.mdx b/site/src/pages/tutorials/thrift/blog/define-service-methods.mdx new file mode 100644 index 00000000000..52a6ab9000c --- /dev/null +++ b/site/src/pages/tutorials/thrift/blog/define-service-methods.mdx @@ -0,0 +1,146 @@ +--- +menuTitle: Define service methods +order: 3 +type: step +level: basic +--- + +# Defining service methods + +Previously, we ran a service on a server and also confirmed that our client could make a call to the service. +In this step, we'll define service methods and other components including objects and an exception type. +We'll leave the service methods empty for now to implement one by one in later steps of this tutorial. + + + +## What you need + +You need to have the files obtained from previous steps: + +- `blog.thrift` +- `BlogServiceImpl.java` +- `BlogClient.java` + +## 1. Write the thrift file + +Let's update the `blog.thrift` file we created earlier in [Step 1. Create a service](/tutorials/thrift/blog/create-service). +We'll add structs, an exception, and service methods. +You can see the full version of the file [here](https://github.com/line/armeria-examples/blob/main/tutorials/thrift/src/main/thrift/blog.thrift). + +1. Add the `BlogPost` struct. + ```cpp filename=blog.thrift + struct BlogPost { + 1: i32 id; + 2: string title; + 3: string content; + 4: i64 createdAt; + 5: i64 modifiedAt; + } + ``` +2. Add structs for request and response objects as follows. + ```cpp filename=blog.thrift + struct CreateBlogPostRequest { + 1: string title; + 2: string content; + } + + struct GetBlogPostRequest { + 1: i32 id; + } + + struct ListBlogPostsRequest { + 1: bool descending; + } + + struct ListBlogPostsResponse { + 1: list blogs; + } + + struct UpdateBlogPostRequest { + 1: i32 id; + 2: string title; + 3: string content; + } + + struct DeleteBlogPostRequest { + 1: i32 id; + } + ``` +3. Add the `BlogNotFoundException`. + ```cpp filename=blog.thrift + exception BlogNotFoundException { + 1: string reason + } + ``` +4. Add service methods for create, read, update, and delete operations. + ```cpp filename=blog.thrift + service BlogService { + ... + + BlogPost createBlogPost(1:CreateBlogPostRequest request), + + BlogPost getBlogPost(1:GetBlogPostRequest request) throws (1:BlogNotFoundException e), + + ListBlogPostsResponse listBlogPosts(1:ListBlogPostsRequest request), + + BlogPost updateBlogPost(1:UpdateBlogPostRequest request) throws (1:BlogNotFoundException e), + + void deleteBlogPost(1:DeleteBlogPostRequest request) throws (1:BlogNotFoundException e), + } + ``` + +## 2. Compile the thrift file + +[Compile the thrift file](/tutorials/thrift/blog/create-service#2-compile-the-thrift-file) to generate Java code. + +After compiling, you may encounter a warning in your IDE, because we updated only the service interface in Thrift, but not yet the implementation in Java. +The warning will be resolved soon in the step below. + +## 3. Override service methods + +Let's override the service methods by adding empty service methods as follows. +We'll implement the service methods one by one in this tutorial. +Let's leave them empty for now. + +```java filename=BlogServiceImpl.java +import example.armeria.blog.thrift.BlogPost; +import example.armeria.blog.thrift.CreateBlogPostRequest; +import example.armeria.blog.thrift.GetBlogPostRequest; +import example.armeria.blog.thrift.ListBlogPostsRequest; +import example.armeria.blog.thrift.ListBlogPostsResponse; +import example.armeria.blog.thrift.UpdateBlogPostRequest; +import example.armeria.blog.thrift.DeleteBlogPostRequest; +import org.apache.thrift.TException; + +public class BlogServiceImpl implements BlogService.AsyncIface { + ... + + @Override + public void createBlogPost(CreateBlogPostRequest request, AsyncMethodCallback resultHandler) + throws TException {} + + @Override + public void getBlogPost(GetBlogPostRequest request, AsyncMethodCallback resultHandler) + throws TException {} + + @Override + public void listBlogPosts(ListBlogPostsRequest request, AsyncMethodCallback resultHandler) + throws TException {} + + @Override + public void updateBlogPost(UpdateBlogPostRequest request, AsyncMethodCallback resultHandler) + throws TException {} + + @Override + public void deleteBlogPost(DeleteBlogPostRequest request, AsyncMethodCallback resultHandler) + throws TException {} +} +``` + +## What's next + +In this step, we've defined empty service methods to implement from now on. + +Next at [Step 4. Implement CREATE](/tutorials/thrift/blog/implement-create), we'll implement a CREATE operation to create a blog post. + + diff --git a/site/src/pages/tutorials/thrift/blog/implement-create.mdx b/site/src/pages/tutorials/thrift/blog/implement-create.mdx new file mode 100644 index 00000000000..e7fddcc8f15 --- /dev/null +++ b/site/src/pages/tutorials/thrift/blog/implement-create.mdx @@ -0,0 +1,166 @@ +--- +menuTitle: "Implement CREATE" +order: 4 +category: thrift +tags: + - server +level: basic +type: step +--- + +# Implementing CREATE operation + +In the previous step, we defined empty service methods. +In this step, we'll fill in one of the service methods to create a blog post and again, try making a call to a service method. +Also, we'll use Armeria's for testing. + + + +## What you need + +You need to have the following obtained from previous steps: + +- [Generated Java code](/tutorials/thrift/blog/create-service#2-compile-the-thrift-file) +- `Main.java` +- `BlogServiceImpl.java` +- `BlogClient.java` +- `BlogServiceTest.java` + +## 1. Implement server-side + +Let's implement a service method to create a blog post. + +1. In the `BlogServiceImpl` class, create an ID generator to issue temporary blog post IDs and a map to contain blog posts. + ```java filename=BlogServiceImpl.java + import java.util.Map; + import java.util.concurrent.ConcurrentHashMap; + import java.util.concurrent.atomic.AtomicInteger; + + public class BlogServiceImpl implements BlogService.AsyncIface { + private final AtomicInteger idGenerator = new AtomicInteger(); + private final Map blogPosts = new ConcurrentHashMap<>(); + ... + } + ``` +2. In the `createBlogPost()` method, create a `BlogPost` object with a generated ID and request parameters. + ```java filename=BlogServiceImpl.java + import java.time.Instant; + ... + @Override + public void createBlogPost(CreateBlogPostRequest request, AsyncMethodCallback resultHandler) + throws TException { + final int id = idGenerator.getAndIncrement(); + final Instant now = Instant.now(); + final BlogPost blogPost = new BlogPost() + .setId(id) + .setTitle(request.getTitle()) + .setContent(request.getContent()) + .setModifiedAt(now.toEpochMilli()) + .setCreatedAt(now.toEpochMilli()); + } + ``` +2. In the `createBlogPost()` method, save the post information in the `blogPosts` map and return the information of the created blog post to the `resultHandler`. + ```java filename=BlogServiceImpl.java + @Override + public void createBlogPost(CreateBlogPostRequest request, AsyncMethodCallback resultHandler) + throws TException { + ... + blogPosts.put(id, blogPost); + final BlogPost stored = blogPost; + resultHandler.onComplete(stored); + } + ``` + +## 2. Implement client-side + +In the `BlogClient` class, add a method to send a request to create a blog post. + +```java filename=BlogClient.java +import example.armeria.blog.thrift.BlogPost; +import example.armeria.blog.thrift.CreateBlogPostRequest; +... +BlogPost createBlogPost(String title, String content) throws TException { + final CreateBlogPostRequest request = + new CreateBlogPostRequest().setTitle(title) + .setContent(content); + return blogService.createBlogPost(request); +} +``` + +## 3. Register a ServerExtension + +In the previous test code, we've connected directly to the server. +This time, let's use Armeria's instead. +This approach will automatically set-up and tear-down a server before tests are run. +Now we don't have to invoke the main method to set up a server before running our tests. + +1. In the `BlogServiceTest` class, register a as follows. + Note that the service instance is added to the configuration. + ```java filename=BlogServiceTest.java + import org.junit.jupiter.api.extension.RegisterExtension; + import com.linecorp.armeria.server.ServerBuilder; + import com.linecorp.armeria.server.thrift.THttpService; + import com.linecorp.armeria.testing.junit5.server.ServerExtension; + ... + @RegisterExtension + static final ServerExtension server = new ServerExtension() { + @Override + protected void configure(ServerBuilder sb) throws Exception { + sb.service("/thrift", + THttpService.builder() + // Add the service to the configuration + .addService(new BlogServiceImpl()) + .build()); + } + }; + ``` + 2. Either remove the test method `hello()` or add the `@Disabled` annotation as follows + to prevent it from attempting a direct connection to the server. + ```java filename=BlogServiceTest.java + @Disabled // Add this + @Test + void hello() throws TException { + ... + } + ``` + +## 4. Test creating a blog post + +Let's test if we can create a blog post. + +1. In the `BlogServiceTest` class, add a test method as follows. + ```java filename=BlogServiceTest.java + import static org.assertj.core.api.Assertions.assertThat; + + import org.apache.thrift.TException; + import org.junit.jupiter.api.Order; + import org.junit.jupiter.api.Test; + + import example.armeria.blog.thrift.BlogPost; + + ... + @Test + void createBlogPost() throws TException { + final BlogClient client = new BlogClient(server.httpUri(), "/thrift"); + final BlogPost response = client.createBlogPost("My first blog", "Hello Armeria!"); + assertThat(response.getId()).isGreaterThanOrEqualTo(0); + assertThat(response.getTitle()).isEqualTo("My first blog"); + assertThat(response.getContent()).isEqualTo("Hello Armeria!"); + System.out.println(response); + } + ``` +2. Run the test case on your IDE or using Gradle. + ```bash + ./gradlew test + ``` + + The service worked as expected if you see the test case passed. + +## What's next + +In this step, we've implemented a method for creating a blog post. +We've also registered to our test. + +Next, at [Step 5. Implement READ](/tutorials/thrift/blog/implement-read), we'll implement a READ operation to read a single post and also multiple posts. + + diff --git a/site/src/pages/tutorials/thrift/blog/implement-delete.mdx b/site/src/pages/tutorials/thrift/blog/implement-delete.mdx new file mode 100644 index 00000000000..13e61d9f813 --- /dev/null +++ b/site/src/pages/tutorials/thrift/blog/implement-delete.mdx @@ -0,0 +1,197 @@ +--- +menuTitle: "Implement DELETE" +order: 7 +category: thrift +tags: + - server +level: basic +type: step +--- + +# Implementing DELETE operation + +So far, we created, read, and updated a blog post. +Now, let's implement and make a call to delete a blog post. +Also, we'll add Armeria's [Documentation Service](/docs/server-docservice) for testing our blog service. + + + +## What you need + +You need to have the following obtained from previous steps: + +- [Generated Java code](/tutorials/thrift/blog/create-service#2-compile-the-thrift-file) +- `Main.java` +- `BlogServiceImpl.java` +- `BlogServiceExceptionHandler.java` +- `BlogClient.java` +- `BlogServiceTest.java` + +## 1. Implement server-side + +In the `BlogServiceImpl` class, implement the `deleteBlogPost()` method to delete a blog post. +Let's throw an exception in case there is no blog post for the given ID. + +```java filename=BlogServiceImpl.java +@Override +public void deleteBlogPost(DeleteBlogPostRequest request, AsyncMethodCallback resultHandler) + throws TException { + final BlogPost removed = blogPosts.remove(request.getId()); + if (removed == null) { + resultHandler.onError( + new IllegalArgumentException("The blog post does not exist. ID: " + request.getId())); + } else { + resultHandler.onComplete(null); + } +} +``` + +## 2. Implement client-side + +In the `BlogClient` class, add the `deleteBlogPost()` method to send a request deleting a blog post. + +```java filename=BlogClient.java +import example.armeria.blog.thrift.DeleteBlogPostRequest; +... +void deleteBlogPost(int id) throws TException { + final DeleteBlogPostRequest request = new DeleteBlogPostRequest().setId(id); + blogService.deleteBlogPost(request); +} +``` + +## 3. Test deleting a blog post + +Let's test deleting a blog post. +We'll delete the blog post with ID `1`, and try retrieving with the same ID to verify it is indeed deleted. +Add a test method like the following. + +```java filename=BlogServiceTest.java +@Test +@Order(7) +void deleteBlogPost() throws TException { + final BlogClient client = new BlogClient(server.httpUri(), "/thrift"); + client.deleteBlogPost(1); + final Throwable exception = catchThrowable(() -> { + client.getBlogPost(1); + }); + assertThat(exception) + .isInstanceOf(BlogNotFoundException.class) + .extracting("reason") + .asString(); +} +``` + +Run all the test cases on your IDE or using Gradle. +Check that you see the test is passed. + +## 4. Test an error case + +Let's test deleting a blog post that does not exist. +Add a test method like the following. + +```java filename=BlogServiceTest.java +@Test +@Order(8) +void deleteInvalidBlogPost() { + final BlogClient client = new BlogClient(server.httpUri(), "/thrift"); + final Throwable exception = catchThrowable(() -> { + client.deleteBlogPost(100); + }); + assertThat(exception) + .isInstanceOf(BlogNotFoundException.class) + .extracting("reason") + .asString() + .isEqualTo("The blog post does not exist. ID: 100"); +} +``` + +Run all the test cases on your IDE or using Gradle. +Check that you see the test is passed. + +## 5. Add the Documentation service + +This time, we'll add Armeria's [Documentation service](/docs/server-docservice). +The Documentation service automatically creates documentation of your service methods, as well as providing means to test out the methods. + +1. In the `newServer()` method, add a and a request example for [creating blog posts](/tutorials/thrift/blog/implement-create), + using . Feel free to add more examples for other service methods. + ```java filename=Main.java + import com.linecorp.armeria.server.docs.DocService; + import example.armeria.blog.thrift.CreateBlogPostRequest; + ... + private static Server newServer(int port) throws Exception { + ... + final CreateBlogPostRequest exampleRequest = new CreateBlogPostRequest() + .setTitle("Example title") + .setContent("Example content"); + final DocService docService = DocService + .builder() + .exampleRequests(List.of(new BlogService.createBlogPost_args(exampleRequest))) + .build(); + ... + } + ``` +2. In the `newServer()` method, add the to our server builder. + ```java filename=Main.java highlight=5 + private static Server newServer(int port) throws Exception { + ... + return Server.builder() + .http(port) + .service("/thrift", tHttpService) + // You can access the documentation service at http://127.0.0.1:8080/docs. + // See https://armeria.dev/docs/server-docservice for more information. + .serviceUnder("/docs", docService) + .build(); + } + ``` + +3. (Optional) To access the Documentation service result easily, edit the log message in the `main()` method. + ```java filename=Main.java highlight=2 + public static void main(String[] args) throws Exception { + ... + logger.info("Server has been started. Serving DocService at http://127.0.0.1:{}/docs", + server.activeLocalPort()); + } + ``` +4. Now, [re-run the server](/tutorials/thrift/blog/run-server#2-run-the-server). + + The server and services are launched successfully if you see this message. + ```bash + Server has been started. Serving DocService at http://127.0.0.1:8080/docs + ``` + +## 6. Check the DocService page + +Let's test and call our service operations using Armeria's Documentation service. + +1. Click the URL http://127.0.0.1:8080/docs from the log message or open up the URL on a web browser. + + If you see the Document service page, you've successfully launched the and server. + + ![](../../../../images/tutorial_blogservice_thrift_docservice_start.png) + +2. Click the **createBlogPost()** method link in the left panel. You can make calls to the method by clicking on the `Debug` button on the top right. + + ![](../../../../images/tutorial_blogservice_thrift_reqex.png) + + Note that in the **REQUEST BODY** section the values specified in the `exampleRequest` are automatically displayed on the page. + + ```java filename=Main.java + final CreateBlogPostRequest exampleRequest = new CreateBlogPostRequest() + .setTitle("Example title") + .setContent("Example content"); + ``` + +3. Click the **SUBMIT** button, and you'll see the blog post information returned in the right panel. + + ![](../../../../images/tutorial_blogservice_thrift_return.png) + +## What's next + +In this step, we've implemented a service method and client method for deleting a blog post. +We've also added [Documentation service](/docs/server-docservice) to our server. + +We've finally come to the end of this tutorial. +Next, try adding more service methods to the tutorial or have a go at developing a service of your own. + + diff --git a/site/src/pages/tutorials/thrift/blog/implement-read.mdx b/site/src/pages/tutorials/thrift/blog/implement-read.mdx new file mode 100644 index 00000000000..a5469f4edc6 --- /dev/null +++ b/site/src/pages/tutorials/thrift/blog/implement-read.mdx @@ -0,0 +1,242 @@ +--- +menuTitle: "Implement READ" +order: 5 +type: step +category: thrift +tags: + - server +level: basic +--- + +# Implementing READ operation + +In the earlier step, we created blog posts. +In this step, we'll implement a read operation and make a call to read blog posts. +We'll write two service methods, one for reading a single post and another for multiple posts. + + + +## What you need + +You need to have the following obtained from previous steps: + +- [Generated Java code](/tutorials/thrift/blog/create-service#2-compile-the-thrift-file) +- `Main.java` +- `BlogServiceImpl.java` +- `BlogClient.java` +- `BlogServiceTest.java` + +## 1. Implement server-side + +Let's write two methods for retrieving blog posts; one for a single post and another for multiple posts. + + + + +In the `BlogServiceImpl` class, implement the `getBlogPost()` method to retrieve a single post. +Let's throw an exception in case there is no blog post for the given ID. + +```java filename=BlogServiceImpl.java +import example.armeria.blog.thrift.BlogNotFoundException; +... +@Override +public void getBlogPost(GetBlogPostRequest request, AsyncMethodCallback resultHandler) + throws TException { + final BlogPost blogPost = blogPosts.get(request.getId()); + if (blogPost == null) { + // throwing an exception will also have the same effect + // throw new BlogNotFoundException("The blog post does not exist. ID: " + request.getId()); + resultHandler.onError( + new BlogNotFoundException("The blog post does not exist. ID: " + request.getId())); + } else { + resultHandler.onComplete(blogPost); + } +} +``` + + + + +1. Implement the `listBlogPosts()` method in the `BlogServiceImpl` class to retrieve multiple posts. + ```java filename=BlogServiceImpl.java + import java.util.List; + import java.util.stream.Collectors; + ... + @Override + public void listBlogPosts(ListBlogPostsRequest request, + AsyncMethodCallback resultHandler) throws TException { + final List blogPosts = this.blogPosts.values().stream().collect(Collectors.toList()); + resultHandler.onComplete(new ListBlogPostsResponse().setBlogs(blogPosts)); + } + ``` +2. Add an if-else statement by adding line 9-16, to sort the blog posts based on the value of the `descending` parameter. + ```java filename=BlogServiceImpl.java showlineno=true + import java.util.Collections; + import java.util.Comparator; + import java.util.Map.Entry; + ... + @Override + public void listBlogPosts(ListBlogPostsRequest request, + AsyncMethodCallback resultHandler) throws TException { + final List blogPosts; + if (request.isDescending()) { + blogPosts = this.blogPosts.entrySet() + .stream() + .sorted(Collections.reverseOrder(Comparator.comparingInt(Entry::getKey))) + .map(Entry::getValue).collect(Collectors.toList()); + } else { + blogPosts = this.blogPosts.values().stream().collect(Collectors.toList()); + } + resultHandler.onComplete(new ListBlogPostsResponse().setBlogs(blogPosts)); + } + ``` + + + + +## 2. Implement client-side + +This time, we'll implement the client-side for reading blog posts. +Let's implement client methods for each corresponding server method. + + + + +In the `BlogClient` class, add a method to retrieve a single post. + +```java filename=BlogClient.java +import example.armeria.blog.thrift.GetBlogPostRequest; +... +BlogPost getBlogPost(int id) throws TException { + final GetBlogPostRequest request = + new GetBlogPostRequest().setId(id); + return blogService.getBlogPost(request); +} +``` + + + + +In the `BlogClient` class, add a method to retrieve a list of posts. + +```java filename=BlogClient.java +import example.armeria.blog.thrift.ListBlogPostsRequest; +import example.armeria.blog.thrift.ListBlogPostsResponse; +... +List listBlogPosts(boolean descending) throws TException { + return blogService.listBlogPosts(new ListBlogPostsRequest().setDescending(descending)) + .getBlogs(); +} +``` + + + + +## 3. Test retrieving a single post + +Let's test if we can retrieve a blog post we created. + +1. In the `BlogServiceTest` class, add a test method to retrieve the first blog post with ID `0`. + ```java filename=BlogServiceTest.java + @Test + void getBlogPost() throws TException { + final BlogClient client = new BlogClient(server.httpUri(), "/thrift"); + final BlogPost blogPost = client.getBlogPost(0); + + assertThat(blogPost.getTitle()).isEqualTo("My first blog"); + assertThat(blogPost.getContent()).isEqualTo("Hello Armeria!"); + System.out.println(blogPost); + } + ``` +2. Add annotations to configure the order our test methods will be executed. + The annotations guarantee that the first blog post will be created in the `createBlogPost()` method before we try to retrieve in the `getBlogPost()` method. + ```java filename=BlogServiceTest.java + import org.junit.jupiter.api.MethodOrderer.OrderAnnotation; + import org.junit.jupiter.api.Order; + import org.junit.jupiter.api.TestMethodOrder; + + @TestMethodOrder(OrderAnnotation.class) // Add this + class BlogServiceTest { + ... + + @Test + @Order(1) // Add this + void createBlogPost() throws TException { + ... + } + + @Test + @Order(2) // Add this + void getBlogPost() throws TException { + ... + } + } + ``` +3. Run all the test cases on your IDE or using Gradle. + + Your client retrieved a blog post from the server successfully if the test is passed. + +## 4. Test an error case + +Let's try retrieving a blog post that does not exist. +Add a test method to retrieve a blog post with an invalid ID, asserting an exception is thrown. + +```java filename=BlogServiceTest.java +import static org.assertj.core.api.Assertions.catchThrowable; +import example.armeria.blog.thrift.BlogNotFoundException; +... +@Test +@Order(3) +void getInvalidBlogPost() { + final BlogClient client = new BlogClient(server.httpUri(), "/thrift"); + final Throwable exception = catchThrowable(() -> { + client.getBlogPost(Integer.MAX_VALUE); + }); + assertThat(exception) + .isInstanceOf(BlogNotFoundException.class) + .extracting("reason") + .asString() + .isEqualTo("The blog post does not exist. ID: " + Integer.MAX_VALUE); +} +``` + +Run all the test cases on your IDE or using Gradle. +Check that you see the test is passed. + +## 5. Test retrieving multiple posts + +Finally, let's test if we can retrieve multiple posts. +Add a test method like the following to create the second blog post and test retrieving the list of blog posts. + +```java filename=BlogServiceTest.java +import java.util.List; +... +@Test +@Order(4) +void listBlogPosts() throws TException { + final BlogClient client = new BlogClient(server.httpUri(), "/thrift"); + client.createBlogPost("My second blog", "Armeria is awesome!"); + + final List blogs = client.listBlogPosts(false); + assertThat(blogs).hasSize(2); + final BlogPost firstBlog = blogs.get(0); + assertThat(firstBlog.getTitle()).isEqualTo("My first blog"); + assertThat(firstBlog.getContent()).isEqualTo("Hello Armeria!"); + + final BlogPost secondBlog = blogs.get(1); + assertThat(secondBlog.getTitle()).isEqualTo("My second blog"); + assertThat(secondBlog.getContent()).isEqualTo("Armeria is awesome!"); + System.out.println(blogs); +} +``` + +Run all the test cases on your IDE or using Gradle. +Check that you see the test is passed. + +## What's next + +In this step, we've implemented service methods and client methods to retrieve blog posts. + +Next, at [Step 6. Implement UPDATE](/tutorials/thrift/blog/implement-update), we'll implement an UPDATE operation to update a blog post. + + diff --git a/site/src/pages/tutorials/thrift/blog/implement-update.mdx b/site/src/pages/tutorials/thrift/blog/implement-update.mdx new file mode 100644 index 00000000000..f7ba509ce9e --- /dev/null +++ b/site/src/pages/tutorials/thrift/blog/implement-update.mdx @@ -0,0 +1,176 @@ +--- +menuTitle: "Implement UPDATE" +order: 6 +category: thrift +tags: + - server +level: basic +type: step +--- + +# Implementing UPDATE operation + +Previously, we created and read blog posts. +Now, let's implement and make a call to update a blog post. +We'll also learn how to handle an exception with a custom exception handler. + + + +## What you need + +You need to have the following obtained from previous steps: + +- [Generated Java code](/tutorials/thrift/blog/create-service#2-compile-the-thrift-file) +- `Main.java` +- `BlogServiceImpl.java` +- `BlogClient.java` +- `BlogServiceTest.java` + +## 1. Implement server-side + +Let's implement the server-side for updating blog posts. +This time, we'll use a custom exception handler. + +### Add an exception handler + +First, add a custom exception handler for the blog service. + +1. Add an exception handler class to convert an `IllegalArgumentException` into a `BlogNotFoundException`. + ```java filename=BlogServiceExceptionHandler.java + package example.armeria.server.blog.thrift; + + import java.util.function.BiFunction; + + import com.linecorp.armeria.common.RpcResponse; + import com.linecorp.armeria.server.ServiceRequestContext; + + import example.armeria.blog.thrift.BlogNotFoundException; + + public class BlogServiceExceptionHandler implements BiFunction { + + @Override + public RpcResponse apply(ServiceRequestContext serviceRequestContext, Throwable cause) { + if (cause instanceof IllegalArgumentException) { + return RpcResponse.ofFailure(new BlogNotFoundException(cause.getMessage())); + } + return RpcResponse.ofFailure(cause); + } + } + ``` +2. In the `Main` class, bind the `BlogServiceExceptionHandler` to our service. + ```java filename=Main.java + ... + private static Server newServer(int port) throws Exception { + final THttpService tHttpService = + THttpService.builder() + .addService(new BlogServiceImpl()) + .exceptionHandler(new BlogServiceExceptionHandler()) // Add this + .build(); + ... + } + ``` + +### Implement service methods + +In the `BlogServiceImpl` class, implement the `updateBlogPost()` method to update a blog post. +This time, let's use the `IllegalArgumentException` instead of the `BlogNotFoundException`. + +```java filename=BlogServiceImpl.java +@Override +public void updateBlogPost(UpdateBlogPostRequest request, AsyncMethodCallback resultHandler) + throws TException { + final BlogPost oldBlogPost = blogPosts.get(request.getId()); + if (oldBlogPost == null) { + resultHandler.onError( + new IllegalArgumentException("The blog post does not exist. ID: " + request.getId())); + } else { + final BlogPost newBlogPost = oldBlogPost + .deepCopy() + .setTitle(request.getTitle()) + .setContent(request.getContent()) + .setModifiedAt(Instant.now().toEpochMilli()); + blogPosts.put(request.getId(), newBlogPost); + resultHandler.onComplete(newBlogPost); + } +} +``` + +## 2. Implement client-side + +Add a method `updateBlogPost()` to send a request to update a blog post. + +```java filename=BlogClient.java +import example.armeria.blog.thrift.UpdateBlogPostRequest; +... +BlogPost updateBlogPost(int id, String newTitle, String newContent) throws TException { + final UpdateBlogPostRequest request = new UpdateBlogPostRequest().setId(id).setTitle(newTitle).setContent(newContent); + return blogService.updateBlogPost(request); +} +``` + +## 3. Test updating a blog post + +Let's try updating the content of the first blog post. +Add a method like the following. + +```java filename=BlogServiceTest.java +@Test +@Order(5) +void updateBlogPosts() throws TException { + final BlogClient client = new BlogClient(server.httpUri(), "/thrift"); + final BlogPost updated = client.updateBlogPost(0, "My first blog", "Hello awesome Armeria!"); + assertThat(updated.getId()).isZero(); + assertThat(updated.getTitle()).isEqualTo("My first blog"); + assertThat(updated.getContent()).isEqualTo("Hello awesome Armeria!"); + System.out.println(updated); +} +``` + +Run all the test cases on your IDE or using Gradle. +Check that you see the test is passed. + +## 4. Test an error case + +To check that our exception handler is working, let's try updating a post which does not exist. + +1. Bind the exception handler to the service for the test server. + ```java filename=BlogServiceTest.java + @RegisterExtension + static final ServerExtension server = new ServerExtension() { + @Override + protected void configure(ServerBuilder sb) throws Exception { + sb.service("/thrift", THttpService.builder() + .exceptionHandler(new BlogServiceExceptionHandler()) // Add this + .addService(new BlogServiceImpl()) + .build()); + } + }; + ``` +2. Add a test method to update a blog post with an invalid ID, asserting a `BlogNotFoundException` is thrown. + ```java filename=BlogServiceTest.java + @Test + @Order(6) + void updateInvalidBlogPost() { + final BlogClient client = new BlogClient(server.httpUri(), "/thrift"); + final Throwable exception = catchThrowable(() -> { + final BlogPost updated = client.updateBlogPost(Integer.MAX_VALUE, "My first blog", "Hello awesome Armeria!"); + }); + assertThat(exception) + .isInstanceOf(BlogNotFoundException.class) + .extracting("reason") + .asString() + .isEqualTo("The blog post does not exist. ID: " + Integer.MAX_VALUE); + } + ``` +3. Run all the test cases on your IDE or using Gradle. + Check that you see the test is passed. + +## What's next + +In this step, we've implemented a service method and client method for updating a blog post. +We've also added an exception handler. + +Next, at [Step 7. Implement DELETE](/tutorials/thrift/blog/implement-delete), we'll implement a method +for deleting a blog post and add a [Documentation Service](/docs/server-docservice) to our service. + + diff --git a/site/src/pages/tutorials/thrift/blog/index.mdx b/site/src/pages/tutorials/thrift/blog/index.mdx new file mode 100644 index 00000000000..90fc4089ead --- /dev/null +++ b/site/src/pages/tutorials/thrift/blog/index.mdx @@ -0,0 +1,134 @@ +--- +type: tutorial +level: basic +--- + +import versions from '/gen-src/versions.json'; + +# Thrift tutorial introduction + +In this tutorial, you'll learn how to build an [Apache Thrift](https://thrift.apache.org/) service with Armeria. + +This tutorial is based on a [sample service](#sample-service), a minimal blog service, with which you can create, read, update, and delete blog posts. +To keep our focus on Armeria, this tutorial and the sample service implement memory-based operations instead of using database. + +Follow this tutorial to write a service yourself or try [running the sample service](#build-and-run-sample-service) right away. + +## Background + +Before we start, let's swiftly go over Armeria's Thrift features: + +- Transport over HTTP/1.1 or HTTP/2. +- Support for `TBINARY`, `TCOMPACT`, `TJSON` and `TTEXT` [serialization formats](/docs/server-thrift#serialization-formats). +- RPC level decorator support for both [client](/docs/client-decorator#implementing-decoratinghttpclientfunction-and-decoratingrpcclientfunction) +and [server](/docs/server-decorator#implementing-decoratinghttpservicefunction-and-decoratingrpcservicefunction). + - Out of the box support for circuit breaker, retries, metric collection and more. +- Full-fledged [Thrift documentation service](/docs/server-docservice). + +## Assumptions + +This tutorial assumes that you have: + +- Experience in building services in Java +- Experience in Java frameworks for server-side programming +- Understanding of Apache Thrift and experience in implementing Thrift services + +## Prerequisites + +To run and develop the sample service, set your computer with the following requirements: + +* JDK 11 or higher +* Thrift compiler: Install a thrift compiler by either [building from source](https://thrift.apache.org/docs/install/) or using a package manager like `brew` or `apt` depending on your environment. + +## Sample service + +The sample service provides you implementations of CRUD operations with corresponding service methods. + +### Sample service structure + +The [sample service code](https://github.com/line/armeria-examples/tree/main/tutorials/thrift) consists of the following folders and files. + +``` +thrift-server/ +├─ src/ +│ ├─ main/ +│ │ ├─ java/ +│ │ │ ├─ example.armeria.server.blog.thrift/ +│ │ │ │ ├─ BlogClient.java +│ │ │ │ ├─ BlogServiceExceptionHandler.java +│ │ │ │ ├─ BlogServiceImpl.java +│ │ │ │ └─ Main.java +│ │ ├─ thrift/ +│ │ │ └─ blog.thrift +│ └─ test/ +│ └─ java/ +│ └─ example.armeria.server.blog.thrift/ +│ └─ BlogServiceTest.java +└─ build.gradle +``` + +### build.gradle + +Here is a part of the `build.gradle` file for the sample service. +If you are trying the tutorial from scratch, base your gradle file on the sample service's [build.gradle](https://github.com/line/armeria-examples/blob/main/tutorials/thrift/build.gradle). + + + +In this tutorial, we use [Gradle](https://gradle.org/) as the build tool and use [thrift-gradle-plugin](https://plugins.gradle.org/plugin/org.jruyi.thrift) to compile thrift IDL files and generate stubs. + + + +{` +plugins { + id "org.jruyi.thrift" version "0.4.2" + id "application" + id "idea" + id "eclipse" +}\n +repositories { + mavenCentral() +}\n +dependencies { + implementation "com.linecorp.armeria:armeria:${versions['com.linecorp.armeria:armeria-bom']}"\n + implementation "com.linecorp.armeria:armeria-thrift0.17:${versions['com.linecorp.armeria:armeria-bom']}"\n + // Logging + runtimeOnly "ch.qos.logback:logback-classic:${versions['ch.qos.logback:logback-classic']}"\n + testImplementation "org.junit.jupiter:junit-jupiter:${versions['org.junit:junit-bom']}"\n + testImplementation "com.linecorp.armeria:armeria-junit5:${versions['com.linecorp.armeria:armeria-bom']}"\n + testImplementation "org.assertj:assertj-core:${versions['org.assertj:assertj-core']}" +}\n +application { + mainClass.set('example.armeria.server.blog.thrift.Main') +}\n +tasks.withType(Test) { + useJUnitPlatform() +} +`} + +## Build and run sample service + +Try running the sample service and see the outcome of this tutorial. +Using Armeria's [Documentation Service](/docs/server-docservice), you can easily verify a server is running, receiving requests and sending responses. + +1. Download the code from [here](https://github.com/line/armeria-examples/tree/main/tutorials/thrift). +2. Build the sample service using the Gradle Wrapper. + ```bash + $ ./gradlew build + ``` +3. Run the sample service again, using the Gradle Wrapper. + ```bash + $ ./gradlew run + ``` +4. Open the Documentation service page on your web browser at http://127.0.0.1:8080/docs. + +## Try writing blog service yourself + +Try writing the blog service yourself by following the guides in the given order: + +1. [Create a service](/tutorials/thrift/blog/create-service) +2. [Run a server](/tutorials/thrift/blog/run-server) +3. [Define service methods](/tutorials/thrift/blog/define-service-methods) +4. [Implement CREATE](/tutorials/thrift/blog/implement-create) +5. [Implement READ](/tutorials/thrift/blog/implement-read) +6. [Implement UPDATE](/tutorials/thrift/blog/implement-update) +7. [Implement DELETE](/tutorials/thrift/blog/implement-delete) diff --git a/site/src/pages/tutorials/thrift/blog/run-server.mdx b/site/src/pages/tutorials/thrift/blog/run-server.mdx new file mode 100644 index 00000000000..d03320d6da1 --- /dev/null +++ b/site/src/pages/tutorials/thrift/blog/run-server.mdx @@ -0,0 +1,170 @@ +--- +menuTitle: "Run a server" +order: 2 +category: thrift +type: step +targetLang: java +--- + +# Running a server + +In this step, we'll create and run a server with the service we created in the previous step. +Also, we'll test making a call to the service with a client. + + + +## What you need + +You need to have the files obtained from previous steps: + +- `blog.thrift` +- `BlogServiceImpl.java` + +## 1. Create a server + +Let's create a server to serve our service. + +1. Create the `Main` class for the server. + You can see the full version of the file [here](https://github.com/line/armeria-examples/tree/main/tutorials/thrift/src/main/java/example/armeria/server/blog/thrift/Main.java). + ```java filename=Main.java + package example.armeria.server.blog.thrift; + + import org.slf4j.Logger; + import org.slf4j.LoggerFactory; + + public final class Main { + private static final Logger logger = LoggerFactory.getLogger(Main.class); + } + ``` +2. Add the `newServer()` method in the `Main` class as follows. + We are using Armeria's to handle Thrift calls. + ```java filename=Main.java + import com.linecorp.armeria.server.thrift.THttpService; + ... + private static Server newServer(int port) throws Exception { + final THttpService tHttpService = + THttpService.builder() + .addService(new BlogServiceImpl()) + .build(); + } + ``` +3. Create and return a server instance using Armeria's . + Note that the service instance, `tHttpService`, is added to the server instance. + ```java filename=Main.java + import com.linecorp.armeria.server.Server; + ... + private static Server newServer(int port) throws Exception { + ... + return Server.builder() + .http(port) + .service("/thrift", tHttpService) // Add the service to server + .build(); + } + ``` +4. Add the `main()` method in the `Main` class as follows. + ```java filename=Main.java + public static void main(String[] args) throws Exception { + final Server server = newServer(8080); + + server.closeOnJvmShutdown().thenRun(() -> { + logger.info("Server has been stopped."); + }); + + server.start().join(); + } + ``` + +## 2. Run the server + +Run the `Main.main()` method on your IDE or using Gradle. +```bash +./gradlew run +``` + +Your server is running if you see the following message. +```bash +[armeria-boss-http-*:8080] INFO com.linecorp.armeria.server.Server - Serving HTTP at /[0:0:0:0:0:0:0:0]:8080 - http://127.0.0.1:8080/ +``` + +## 4. Create a client + +Let's create a client to send a request to the service. + +1. Create a class for our client. We'll name the class `BlogClient`. + ```java filename=BlogClient.java + package example.armeria.server.blog.thrift; + + import org.slf4j.Logger; + import org.slf4j.LoggerFactory; + + public class BlogClient { + private static final Logger logger = LoggerFactory.getLogger(BlogClient.class); + } + ``` +2. In the `BlogClient` class, add a constructor and create a Thrift client instance using Armeria's . + ```java filename=BlogClient.java + import com.linecorp.armeria.client.thrift.ThriftClients; + import example.armeria.blog.thrift.BlogService; + + public class BlogClient { + ... + private final BlogService.Iface blogService; + + BlogClient(URI uri, String path) { + blogService = + ThriftClients.builder(uri) + .path(path) + .build(BlogService.Iface.class); + } + } + ``` +3. Add the `hello()` method to send a request to the `hello()` method of our service. + ```java filename=BlogClient.java + String hello() throws TException { + return blogService.hello(); + } + ``` + +## 5. Test connecting to the server + +Let's create test code and connect to the server by sending a request using the client. +Note that we'll use test code to verify what we implement along the way. + +1. Create a file, `BlogServiceTest.java`, under `{project_root}/src/test/java/example/armeria/server/blog/thrift` as follows. + You can see the full version of the file [here](https://github.com/line/armeria-examples/blob/main/tutorials/thrift/src/test/java/example/armeria/server/blog/thrift/BlogServiceTest.java). + ```java filename=BlogServiceTest.java + package example.armeria.server.blog.thrift; + + class BlogServiceTest {} + ``` +2. In the `BlogServiceTest` class, add a test method as follows. + ```java filename=BlogServiceTest.java + import java.net.URI; + import org.apache.thrift.TException; + import org.junit.jupiter.api.Test; + ... + @Test + void hello() throws TException { + final BlogClient client = + new BlogClient(URI.create("http://127.0.0.1:8080"), "/thrift"); + final String response = client.hello(); + assertThat(response).isEqualTo("Hello, Armeria!"); + System.out.println(response); + } + ``` +3. Make sure that your server is running. + If you have not stopped the server, it should already be running. + Otherwise, [re-run the server](#2-run-the-server). +4. Run the test case on your IDE or using Gradle. + ``` + ./gradlew test + ``` + Your client sent a request to the service successfully if the test passes. + +## What's next + +In this step, we've created and run a server. + +Next, at [Step 3. Define service methods](/tutorials/thrift/blog/define-service-methods), we'll define empty service methods to implement later on. + + diff --git a/site/src/pages/tutorials/toc.json b/site/src/pages/tutorials/toc.json index 44794f308f8..a3eecf7ff92 100644 --- a/site/src/pages/tutorials/toc.json +++ b/site/src/pages/tutorials/toc.json @@ -25,7 +25,14 @@ "grpc/blog/implement-delete", "grpc/blog/add-docservice" ], - "Thrift service":{ - "Coming soon": null - } + "Thrift service":[ + "thrift/blog", + "thrift/blog/create-service", + "thrift/blog/run-server", + "thrift/blog/define-service-methods", + "thrift/blog/implement-create", + "thrift/blog/implement-read", + "thrift/blog/implement-update", + "thrift/blog/implement-delete" + ] }