cuốn sách gpt4 ai đã làm

Sử dụng httputils+sbe (SimpleBinaryEncoding) để phát triển javarpc cung cấp tài chính

In lại Tác giả: Sahara Thời gian cập nhật: 2024-12-30 14:38:57 57 4
mua khóa gpt4 Nike

1. Làm quen với Mã hóa nhị phân đơn giản (sbe)

Mục tiêu chính của thư viện Java hiệu suất cao Agrona là giảm tắc nghẽn hiệu suất và cung cấp cho các nhà phát triển bộ đệm nguyên tử và trực tiếp an toàn theo luồng, danh sách kiểu nguyên thủy không có thao tác quyền anh, bản đồ và bộ sưu tập băm mở cũng như hàng đợi không khóa. khi xử lý các tình huống đồng thời và có độ trễ thấp.

Mã hóa nhị phân đơn giản (sbe) là một phần của Agrona và là một phần của khung truyền thông hiệu suất cao Aeron.

2. rpc là gì?

Khi nói đến rpc, nhiều người sẽ nghĩ ngay đến dubbo (trong nước) và grpc. Người ta ước tính rằng các dịch vụ đăng ký và khám phá cũng sẽ được liên kết với nó; nó cũng có thể được liên kết với các dịch vụ vi mô. Bạn có thể cảm thấy vấn đề này “cũ và nặng nề”, và bạn sợ! .

Trên thực tế, nó rất đơn giản. Khi bạn yêu cầu http, đó là yêu cầu rpc (gọi thủ tục từ xa). Điển hình nhất là yêu cầu http + json.

3. Bây giờ hãy nói về httputils + sbe

Ở đây chúng ta sẽ sử dụng hai plug-in khung solon quan trọng: một là plug-in công cụ httputils và cái còn lại là plug-in tuần tự hóa abc + agrona (abc được điều chỉnh cho phù hợp với nhiều sơ đồ mã hóa và giải mã).

  org.noear solon-serialization-abc    org .agrona agrona ${agrona-sbe.version   org.noear solon-net-httputils 

Tôi muốn cảm ơn khuôn khổ solon cho việc này, trong đó nhấn mạnh đến sự thống nhất ba ngôi (mvc và rpc được tích hợp một cách tự nhiên). Tiếp theo, hãy bắt đầu làm việc....

  • Gói công khai (bạn cũng có thể xác định các lớp thực thể tương ứng trên máy khách và máy chủ. Chỉ cần triển khai giao diện SbeSerializable)

Xác định một lớp thực thể sbe ở đây. Lưu ý rằng giao diện SbeSerializable phải được triển khai.

@Getter @Setter public class MessageDo thực hiện SbeSerializable { id dài riêng tư; tiêu đề chuỗi riêng tư; @Override public void serializeRead(SbeInput in) { id = in.readLong(); title = in.readString(); (SbeOutput out) { out.writeLong(id); out.writeString(title); }
  • Máy chủ (chỉ hỗ trợ nhận dữ liệu @Body, chỉ hỗ trợ các lớp thực thể)

Trong dự án web solo, hãy thêm bộ điều khiển (chú thích có thể là @Remoting hoặc @Controller). Khi sử dụng @Remoting, không cần thêm chú thích @Mapping vào phương thức.

#Thêm plug-in org.noear:solon-web org.noear:solon-serialization-abc org.agrona:agrona:${agrona-sbe.version} # Cung cấp hỗ trợ tuần tự hóa sbe
@Mapping("/rpc/demo") @Remoting public class HelloServiceImpl { @Override public MessageDo hello(@Body MessageDo message) { //Bạn cũng có thể nhận các biến đường dẫn và yêu cầu thông báo trả về ngữ cảnh; } }
  • Ứng dụng khách cho HttpUtils (chỉ hỗ trợ gửi dữ liệu nội dung, chỉ hỗ trợ các lớp thực thể)
#Thêm plug-in org.noear:solon-net-httputils org.noear:solon-serialization-abc org.agrona:agrona:${agrona-sbe.version} # Cung cấp hỗ trợ tuần tự hóa sbe
// Mã ứng dụng @Component public class DemoCom { public MessageDo hello() { MessageDo message = new MessageDo(); // Chỉ ra rằng dữ liệu yêu cầu là ABC và dữ liệu nhận được phải là ABC return HttpUtils. http("http://localhost:8080/rpc/demo/hello") .serializer(AbcBytesSerializer.getInstance()) .header(ContentTypes.HEADER_CONTENT_TYPE, ContentTypes.ABC_VALUE) .header(ContentTypes.HEADER_ACCEPT, ContentTypes.ABC_VALUE) .bodyOfBean(message) .postAs(MessageDo.class);

4. Tóm tắt

Nói chung, không có sự khác biệt lớn so với json. Điều chính là chỉ định: bộ nối tiếp, loại nội dung và loại nhận để mỗi đầu có thể xác định loại dữ liệu.

5. Bạn cũng có thể sử dụng khung "chú thích http client"

Một số người chắc chắn sẽ cho rằng một giao diện là được, nhưng nếu có nhiều giao diện thì sẽ có rất nhiều mã yêu cầu http lặp lại được viết ra. Vì vậy, "annotation http client" rất quan trọng, đó cũng là lý do tại sao nhiều rpc framework phổ biến. Cũng giống như gọi giao diện cục bộ, hãy sử dụng giao diện từ xa.

nami là ứng dụng khách rpc (hoặc ứng dụng khách http được chú thích) của khung solon và hỗ trợ nhiều tuần tự hóa khác nhau. (Miễn là nó là ứng dụng khách http có chú thích "hỗ trợ tùy chỉnh tuần tự hóa" thì nó đều có sẵn!).

  • Thêm hai gói phụ thuộc
#添加插件 org.noear:nami-coder-abc # abc 编解码支持 org.noear:nami-channel-http # http 请求通道支持,也可以是 socketd(支持 tcp, udp, ws) org.agrona:agrona:${agrona-sbe.version} # 提供 sbe 序列化支持
  • 代码应用(只支持 body 数据提交,只支持实体类)
@NamiClient(url = "http://localhost:8080/rpc/demo", headers = {ContentTypes.ABC, ContentTypes.ABC_ACCEPT}) public interface HelloService { MessageDo hello(@NamiBody MessageDo message); //方法2 //方法3 //方法4 //方法5 //方法6 } @Component public class DemoCom { @NamiClient //注入 HelloService helloService; public MessageDo hello() { MessageDo message = new MessageDo(); message.setId(3); rerturn helloService.hello(message); } }

最后此篇关于使用httputils+sbe(SimpleBinaryEncoding)实现金融级javarpc的文章就讲到这里了,如果你想了解更多关于使用httputils+sbe(SimpleBinaryEncoding)实现金融级javarpc的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

57 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress