Skip to content

Latest commit

 

History

History
199 lines (147 loc) · 4.35 KB

armeria.md

File metadata and controls

199 lines (147 loc) · 4.35 KB

Armeria介绍

基本介绍

Armeria是一个开源的异步HTTP/2 RPC/REST客户端/服务器库,构建于Java 8NettyThriftgRPC之上。它的主要目标是帮助工程师构建使用HTTP/2作为会话层协议的高性能异步微服务。

ArmeriaNetty作者Trustin Lee开发的RPC框架,也是我目前知道的唯一可以将Thrift生成文档的框架。

armeria的slack频道

依赖

Maven配置

依赖版本配置

<properties>
  <armeria.version>0.73.0</armeria.version>
</properties>

配置依赖

  • Armeria依赖
<dependency>
    <groupId>com.linecorp.armeria</groupId>
    <artifactId>armeria</artifactId>
    <version>${armeria.version}</version>
</dependency>
  • Thrift支持依赖
<dependency>
    <groupId>com.linecorp.armeria</groupId>
    <artifactId>armeria-thrift</artifactId>
    <version>${armeria.version}</version>
</dependency>
  • gRPC支持依赖
<dependency>
    <groupId>com.linecorp.armeria</groupId>
    <artifactId>armeria-grpc</artifactId>
    <version>${armeria.version}</version>
</dependency>
  • 使用retrofit2作为HTTP Client的依赖
<dependency>
    <groupId>com.linecorp.armeria</groupId>
    <artifactId>armeria-retrofit2</artifactId>
    <version>${armeria.version}</version>
</dependency>
  • 更多Maven配置

Setting up a

Gradle配置

dependencies {
    ['armeria',
     'armeria-grpc',
     'armeria-thrift'
}
  • 更多Gradle配置

Setting up a project with Gradle

使用

基本使用以Armeria + Thrift为例。

如何使用Thrift,可以查看Thrift介绍来进行了解。

定义结构和接口

namespace java com.github.tonydeng.demo.rpc.armeria.facade


typedef i32 int
typedef i64 long

enum BookType {
        BOOK = 0,
        NEWS_PAPER = 1,
        COMIC_BOOK = 2,
}

struct Book {
    1: string ISBN,
    2: string title,
    3: string author,
    4: int page,
    5: list<string> keyword,
}

service BookService {

    Book getBook(1: string isbn),

    list<Book>  createBooks(1: list<Book> books),
}

实现生产者

@Service
public class BookServiceProducer implements BookService.Iface {
    @Override
    public Book getBook(String isbn) {
        if (Strings.isNullOrEmpty(isbn)) {
            isbn = generateIsbn();
        }

        return new Book(isbn, "Armeria Samples", "Tony", 100,
                Lists.newArrayList("RPC", "Armeria"));
    }

    @Override
    public List<Book> createBooks(List<Book> books) {
        if (CollectionUtils.isEmpty(books)) {
            books = Lists.newArrayList();
        }

        for (Book b : books) {
            b.setISBN(generateIsbn());
        }
        return books;
    }
}

启动服务

@Slf4j
@SpringBootApplication(scanBasePackages = {"com.github.tonydeng.demo.rpc.armeria.producer"})
public class ArmeriaApplication {
    static final int PORT = 9000;

    public static void main(String[] args) {
        log.info("init armeria application.......");
        SpringApplication.run(ArmeriaApplication.class, args);
        final ServerBuilder sb = new ServerBuilder();

        sb.service("/book", THttpService.of(new BookServiceProducer(),
                ThriftSerializationFormats.COMPACT));
        sb.port(PORT, SessionProtocol.HTTP);
        sb.serviceUnder("/docs/", new DocService());
        sb.build().start().join();
        log.info("ArmeriaApplication Start.......");
    }
}

实现消费者

@Slf4j
@Service("BookService")
@SpringBootConfiguration
public class BookServiceConsumer implements BookService.Iface {
    private static final String BOOK_URI = COMPACT.uriText()
            + "+http://127.0.0.1:9000/book";


    private static final BookService.Iface bookService =
            Clients.newClient(BOOK_URI, BookService.Iface.class);

    @Override
    public Book getBook(String isbn) throws TException {
        return bookService.getBook(isbn);
    }

    @Override
    public List<Book> createBooks(List<Book> books) throws TException {
        return bookService.createBooks(books);
    }

}

更多内容请查看armeria-samples