- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
protostuf 一直是高性能序列化的代表之一。但是用起来,可难受了,你得先申明 protostuf 配置文件,并且要把这个配置文件转成类。所以必然要学习新语法、新工具.
可能真的太难受了!于是乎,(有不爽的人)搞了个有创意的框架 protostuff(多一个字母“f”)。它借用注解,替代了 protostuf 文件申明和生成类的过程,丰常的接地气.
一讲 rpc ,很多人会想到 dubbo (国产)和 grpc。估计还会联想到注册与发现服务;可能还会联想到微服务。可能就会觉得这个事儿“老重啦”,害怕! 。
其实很简单的,你请求一次 http 就是个 rpc 请求了(远程过程调用嘛)。最典型的就是 http + json 请求了.
这里我们会用到两个重要的 solon 框架的插件:一个是 httputils 工具插件,一个是 protostuff 序列化插件.
<dependency>
<groupId>org.noear</groupId>
<artifactId>solon-serialization-protostuff</artifactId>
</dependency>
<dependency>
<groupId>org.noear</groupId>
<artifactId>solon-net-httputils</artifactId>
</dependency>
这里要感谢 solon 框架,它强调三元合一(mvc 与 rpc 是自然一体的)。下面,开始干活啦... 。
@Tag
顺序与类型对应上即可 )这里定义一个 protostuff 实体类。注意 @Tag 注解,它是替代 protostuf 配置文件的关键.
@Setter
@Getter
public class MessageDo {
@Tag(1) // Protostuff 注解,顺序位从 1 开始
private long id;
@Tag(2)
private String title;
}
在 solon web 项目里,添加一个控制器(注解可以用 @Remoting 或 @Controller)。使用 @Remoting 时,方法上不需要加 @Mapping 注解.
#添加插件
org.noear:solon-web
org.noear:solon-serialization-protostuff
@Mapping("/rpc/demo")
@Remoting
public class HelloServiceImpl {
@Override
public MessageDo hello(@Body MessageDo message) { //还可接收路径变量,与请求上下文
return message;
}
}
#添加插件
org.noear:solon-net-httputils
//应用代码
@Component
public class DemoCom {
public MessageDo hello() {
MessageDo message = new MessageDo();
message.setId(3);
//指明请求数据为 PROTOBUF,接收数据要 PROTOBUF
return HttpUtils.http("http://localhost:8080/rpc/demo/hello")
.serializer(ProtostuffBytesSerializer.getInstance())
.header(ContentTypes.HEADER_CONTENT_TYPE, ContentTypes.PROTOBUF_VALUE)
.header(ContentTypes.HEADER_ACCEPT, ContentTypes.PROTOBUF_VALUE)
.bodyOfBean(message)
.postAs(MessageDo.class);
}
}
总体上,跟 json 没什么大的区别。主要是指定了:序列化器、内容类型、接收类型,让各端能识别类据类型.
肯定也会有人觉得,一个接口还好,如果有很多接口就要写很多重复的http请求代码了。所以,“注解式 http 客户端” 很重要,这也是很多 rpc 框架流行的原因,就像调用本地接口一样,使用远程接口.
nami 是 solon 框架的 rpc 客户端(或者,注解式 http 客户端),支持各种序列化。(只要是“支持序列化定制”的注解式 http 客户端,用法都差不多) 。
#添加插件
org.noear:nami-coder-protostuff # protostuff 编解码支持
org.noear:nami-channel-http # http 请求通道支持,也可以是 socketd(支持 tcp, udp, ws)
@NamiClient(url = "http://localhost:8080/rpc/demo", headers = {ContentTypes.PROTOBUF, ContentTypes.PROTOBUF_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+protostuff实现高性能rpc的文章就讲到这里了,如果你想了解更多关于使用httputils+protostuff实现高性能rpc的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在尝试开发一个安全的 Web 应用程序,它可以接受表单数据,将其编码到数据库中以消除跨站点脚本问题,然后在其他网页上很好地格式化它。 正在使用 对表单数据进行编码 HttpUtility.Html
我尝试在 wp8.1 中开发某些应用程序时找不到 HttpUtility.UrlDecode 或 HttpUtility.UrlEncode。我包含了 System.net 命名空间。这是从 8.1
我在下载文件时遇到问题,下载时将所有空格替换为下划线。 基本上我在这里遇到了问题: Response.AddHeader("Content-Disposition", "attachment;
我正在使用这两行代码作为反向代理 reverseProxy:=httputil.NewSingleHostReverseProxy(url) reverseProxy.ServeHTTP(rw, re
我在编译 C# 应用程序时遇到此错误。看起来像是一个微不足道的错误,但我无法解决它。 我的设置是 Windows 7 64 位。 Visual-Studio 2010 C# 表示 B2Rel。 我添加
我正在尝试提取带有 + 特殊字符的电子邮件,但由于某种原因 ParseQueryString 跳过它: namespace ParsingProblem { class Pro
我必须对一个字段进行编码,以确保脚本注入(inject)的安全。 我知道我可以使用 HttpUtility.HtmlEncode 和 Decode,但是这种用于 HI-ASCII 字符的方法超出了数据
我是 Android 编程新手,我一直在学习教程以在我的应用程序中获取实时 Twitter 提要。我在我的 String twitterTweets = httpUtil.getHttpRespons
我正在尝试使用 HttpUtility.UrlEncode 对以下字符串进行编码; 1:7:1:0:0:0:0:0:0:0:FROM BOUQUET "userbouquet.dbe01.tv" OR
我正在使用 facebook-java-api 为我的 Web 应用程序实现 facebook connect。我实际上正在遵循此 site 中的教程 我已经编写了一个 servlet 来实现教程中给
我正在尝试对要发送到网络服务进行处理的参数进行编码。我从一个带有参数的命令开始,例如: TransportProviderConfirmation/68,Akal Singh,+97254494486
当 .net 在您请求时已经解码查询字符串时,HttpUtility.UrlDecode 有什么意义。 这是经典 ASP 的后遗症还是我遗漏了什么? 最佳答案 如果您从其他来源收到 UrlEncode
我收到以下错误: The name 'HttpUtility' does not exist in the current context 我正在构建一个 winform 应用程序,这是我使用 fra
这可能是个愚蠢的问题,但每次都会让我感到困惑。 HttpUtility 有方法 HtmlDecode 和 UrlDecode。这两种方法是否解码我可能发现的任何内容(Html/Http 相关)?我什么
我有一个返回 View 的 ASP.NET MVC Controller 。在这个 View 中,我创建了一些 html。例如 @Html.ActionLink(HttpUtility.HtmlDec
我使用此代码发送彩信,所有参数都正确,但连接被拒绝。并且网络已在移动彩信上连接。 HttpUtils 是一个来自此处下载的库的类:https://github.com/android/platform
我处在一个我有一些路径的情况下。此路径可能类似于“jadajada.com/My Site.html”。 我使用 HttpUtility.UrlEncode 对 url 进行编码,这很棒。但是,我遇到
有人能给我解释一下 ParseQueryString 的这种行为吗: var qs = HttpUtility.ParseQueryString("/Site/controller/Index?dat
我试图在我的 VB.NET 项目中调用静态 HttpUtility.UrlEncode,但 IDE 无法识别该类,表示它未声明。 我已将命名空间 System.Net 和 System.Web 导入到
如何在窗口应用程序中使用 httpUtility.encode 和 decode。我实现了一个窗口应用程序。此应用程序使用 Web 请求到 Web 服务器。 Web 服务器响应 http 编码版本。那
我是一名优秀的程序员,十分优秀!