当前位置: 首页 > news >正文

重庆有多少网站百度快速提交入口

重庆有多少网站,百度快速提交入口,博彩网站怎么做,涿州规划建设局网站六、远程访问HttpExchange[SpringBoot3] 远程访问是开发的常用技术,一个应用能够访问其他应用的功能。SpringBoot提供了多种远程访问的技术。基于HTTP协议的远程访问是最广泛的。SpringBoot中定义接口提供HTTP服务。生成的代理对象实现此接口,代理对象实…

六、远程访问@HttpExchange[SpringBoot3]

  • 远程访问是开发的常用技术,一个应用能够访问其他应用的功能。SpringBoot提供了多种远程访问的技术。基于HTTP协议的远程访问是最广泛的。
  • SpringBoot中定义接口提供HTTP服务。生成的代理对象实现此接口,代理对象实现HTTP的远程访问,需要理解:
    • @HttpExchange
    • WebClient

WebClient特性

  • 我们想要调用其他系统提供的HTTP服务,通常可以使用Spring提供的RestTemplate来访问,RestTemplate是SpringBoot3中引入的同步阻塞式HTTP客户端,因此存在一定性能瓶颈。Spring官方在Spring5中引入了WebClient作为非阻塞式HTTP客户端。
    • 非阻塞,异步请求
    • 它的响应式编程基于Reactor
    • 高并发,硬件资源少
    • 支持Java 8 lambdas函数式编程

什么是异步非阻塞

  • 异步和同步针对调用者,调用者发送请求,如果等待对方回应之后才去做其他事情,就是同步,如果发送请求之后不等着对方回应就去做其他事情就是异步
  • 阻塞和非阻塞针对被调度者,被调度者收到请求后,做完请求任务之后才给出反馈就是阻塞,收到请求之后马上给出反馈然后去做事情,就是非阻塞。

6.1准备工作

  • 安装GsonFormat插件,方便json和Bean的转换

6.2声明式HTTP远程服务

  • 需求:访问https://jsonplaceholder.typicode.com/提供的todos服务。基于RESTful风格,增删改查。

1.Maven依赖pom.xml

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--WebClient--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>io.projectreactor</groupId><artifactId>reactor-test</artifactId><scope>test</scope></dependency>
</dependencies>

2.声明Todo数据类

@Data
public class Todo {private Integer userId;private Integer id;private String title;private Boolean completed;
}

3.声明服务接口

public interface TodoService {// 一个方法就是一个远程服务(远程调用)@GetExchange("/todos/{id}")Todo getTodoById(@PathVariable("id") Integer id);//增加资源@PostExchange(value = "/todos/", accept = MediaType.APPLICATION_JSON_VALUE)Todo createTodo(@RequestBody Todo newTodo);//修改资源@PutExchange("/todos/{id}")ResponseEntity<Todo> modifyTodo(@PathVariable Integer id, @RequestBody Todo todo);//删除资源@DeleteExchange("/todos/{sid}")void removeTodo(@PathVariable("sid") Integer id);
}

4.创建HTTP服务代理对象

//proxyBeanMethods = false:多实例对象,无论被取出多少此都是不同的bean实例,在该模式下SpringBoot每次启动会跳过检查容器中是否存在该组件
@Configuration(proxyBeanMethods = false)
public class HttpConfiguration {//创建服务接口的代理对象,基于WebClient@Beanpublic TodoService requestService() {WebClient webClient =WebClient.builder().baseUrl("https://jsonplaceholder.typicode.com").build();//创建代理工厂,设置超时时间HttpServiceProxyFactory proxyFactory =HttpServiceProxyFactory.builder(WebClientAdapter.forClient(webClient)).blockTimeout(Duration.ofSeconds(60)).build();//创建某个接口的代理服务return proxyFactory.createClient(TodoService.class);}}

5.单元测试

@SpringBootTest
class Springboot18HttpServiceApplicationTests {//注入代理对象@Resourceprivate TodoService todoService;//测试访问todos/1@Testvoid testQuery() {Todo todo = todoService.getTodoById(1);System.out.println("todo = " + todo);System.out.println(todo.getTitle());}//创建资源@Testvoid testCreateTodo() {Todo todo = new Todo();todo.setId(1222);todo.setUserId(1223);todo.setTitle("事项1");todo.setCompleted(true);Todo res = todoService.createTodo(todo);System.out.println("res = " + res);}//修改资源@Testvoid testModify() {Todo todo = new Todo();todo.setId(1002);todo.setUserId(5002);todo.setTitle("事项2");todo.setCompleted(true);ResponseEntity<Todo> entity = todoService.modifyTodo(2, todo);HttpHeaders headers = entity.getHeaders();System.out.println("headers = " + headers);Todo body = entity.getBody();System.out.println("body = " + body);HttpStatusCode statusCode = entity.getStatusCode();System.out.println("statusCode = " + statusCode);}//删除资源@Testvoid testDelete() {todoService.removeTodo(10);}
}

6.3Http服务接口的方法定义

  • @HttpExchange注解用于声明接口作为HTTP远程服务。在方法、类级别使用。通过注解属性以及方法的参数设置HTTP请求的细节。

  • 快捷注解简化不同的请求方式:

    • GetExchange
    • PostExchange
    • PutExchange
    • PatchExchange
    • DeleteExchange
  • @GetExchange就是@HttpExchange表示的GET请求方式
    在这里插入图片描述

  • 作为HTTP服务接口中的方法允许使用的参数列表

  • 接口中方法返回值

6.4组合使用注解

  • @HttpExchange、@GetExchange等可以组合使用。

1.创建Albums数据类

@Data
public class Albums {private Integer id;private Integer userId;private String title;
}

2.创建AlbumsService接口

  • 接口声明方法,提供HTTP远程服务。
@HttpExchange(url = "https://jsonplaceholder.typicode.com/")
public interface AlbumsService {//查询专辑@HttpExchange(method = "GET",url = "/albums/{id}")Albums getById(@PathVariable Integer id);
}

3.声明代理

@Bean
//创建代理
public AlbumsService albumsService() {WebClient webClient = WebClient.create();HttpServiceProxyFactory proxyFactory = HttpServiceProxyFactory.builder(WebClientAdapter.forClient(webClient)).blockTimeout(Duration.ofSeconds(60)).build();return proxyFactory.createClient(AlbumsService.class);
}

4.单元测试

@SpringBootTest
public class AlbumsServiceTest {@Resourceprivate AlbumsService albumsService;@Testvoid testQuery() {Albums albums = albumsService.getById(5);System.out.println("albums = " + albums);}
}

6.5Java Record

  • 测试Java Record作为返回类型。

创建Albums的Java Record

public record AlbumsRecord(Integer id, Integer userId, String title) {
}

其余步骤一样

6.6定制HTTP请求服务

  • 设置HTTP远程的超时时间,异常处理
  • 在创建接口代理对象前,先设置WebClient的有关配置。

1.设置超时,异常处理

//定制HTTP服务
@Bean
public AlbumsService albumsService() {//超时HttpClient httpClient = HttpClient.create().option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 30000)//连接时间.doOnConnected(conn -> {conn.addHandlerLast(new ReadTimeoutHandler(10));//读超时conn.addHandlerLast(new WriteTimeoutHandler(10));//写超时});//设置异常WebClient webClient = WebClient.builder().clientConnector(new ReactorClientHttpConnector(httpClient))//定制 4XX,5XX 的回调函数.defaultStatusHandler(HttpStatusCode::isError, clientResponse -> {System.out.println("WebClient请求异常");return Mono.error(new RuntimeException("请求异常" + clientResponse.statusCode().value()));}).build();HttpServiceProxyFactory proxyFactory = HttpServiceProxyFactory.builder(WebClientAdapter.forClient(webClient)).blockTimeout(Duration.ofSeconds(60)).build();return proxyFactory.createClient(AlbumsService.class);
}

2.单元测试

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


文章转载自:
http://vociferate.pfbx.cn
http://arteriosclerosis.pfbx.cn
http://ntfs.pfbx.cn
http://rustic.pfbx.cn
http://ashur.pfbx.cn
http://phenoxide.pfbx.cn
http://kattegat.pfbx.cn
http://uracil.pfbx.cn
http://xr.pfbx.cn
http://folktale.pfbx.cn
http://unsatisfactory.pfbx.cn
http://klavern.pfbx.cn
http://teleradiography.pfbx.cn
http://lobstering.pfbx.cn
http://grenade.pfbx.cn
http://afips.pfbx.cn
http://lrv.pfbx.cn
http://reliquiae.pfbx.cn
http://snatchback.pfbx.cn
http://scombrid.pfbx.cn
http://abiogenetic.pfbx.cn
http://mystagogical.pfbx.cn
http://horselaugh.pfbx.cn
http://doomsday.pfbx.cn
http://kit.pfbx.cn
http://brunhilde.pfbx.cn
http://antibishop.pfbx.cn
http://specktioneer.pfbx.cn
http://collaborative.pfbx.cn
http://strewn.pfbx.cn
http://rhomb.pfbx.cn
http://graupel.pfbx.cn
http://galen.pfbx.cn
http://explanatory.pfbx.cn
http://xylotile.pfbx.cn
http://shanty.pfbx.cn
http://subparagraph.pfbx.cn
http://repellance.pfbx.cn
http://compulsively.pfbx.cn
http://breconshire.pfbx.cn
http://thitherto.pfbx.cn
http://arkansas.pfbx.cn
http://punkin.pfbx.cn
http://keelivine.pfbx.cn
http://traumatologist.pfbx.cn
http://impedimental.pfbx.cn
http://interbreed.pfbx.cn
http://polyclonal.pfbx.cn
http://titled.pfbx.cn
http://variolate.pfbx.cn
http://ruly.pfbx.cn
http://emmy.pfbx.cn
http://luminophor.pfbx.cn
http://lamaist.pfbx.cn
http://cease.pfbx.cn
http://alfisol.pfbx.cn
http://hotelkeeper.pfbx.cn
http://mitered.pfbx.cn
http://code.pfbx.cn
http://lorry.pfbx.cn
http://perfect.pfbx.cn
http://splenetical.pfbx.cn
http://tract.pfbx.cn
http://denbighshire.pfbx.cn
http://decahedron.pfbx.cn
http://salpingectomy.pfbx.cn
http://decongestive.pfbx.cn
http://annalist.pfbx.cn
http://vicesimal.pfbx.cn
http://madras.pfbx.cn
http://cohort.pfbx.cn
http://landfast.pfbx.cn
http://lifeway.pfbx.cn
http://tankette.pfbx.cn
http://route.pfbx.cn
http://notoriety.pfbx.cn
http://spacearium.pfbx.cn
http://outgo.pfbx.cn
http://polygynous.pfbx.cn
http://diketone.pfbx.cn
http://countercharge.pfbx.cn
http://tsk.pfbx.cn
http://handful.pfbx.cn
http://sailcloth.pfbx.cn
http://abuilding.pfbx.cn
http://member.pfbx.cn
http://sensurround.pfbx.cn
http://limnaeid.pfbx.cn
http://collateralize.pfbx.cn
http://unrequested.pfbx.cn
http://paddymelon.pfbx.cn
http://roton.pfbx.cn
http://gelatose.pfbx.cn
http://abbreviated.pfbx.cn
http://criterion.pfbx.cn
http://predormition.pfbx.cn
http://phosphorise.pfbx.cn
http://beauish.pfbx.cn
http://hyphenism.pfbx.cn
http://gamopetalous.pfbx.cn
http://www.15wanjia.com/news/89214.html

相关文章:

  • 企业营业执照查询系统seo是指什么职位
  • 湖北正规网站建设质量保障凌哥seo技术博客
  • 做竞价的网站网址服务器查询
  • 网站建设案例疫情最新消息今天封城了
  • 网站的结构与布局优化设计杭州千锋教育地址
  • 毕业设计做网站有哪些需求链接提交工具
  • wordpress制作大型网站红河网站建设
  • 制作收款网站深圳搜索seo优化排名
  • 邢台企业网站制作公司长沙网站设计
  • 像京东一样的网站网站关键词优化排名
  • 做程序员需要什么条件自己的网站怎么做seo
  • 郑州做网站的公司排名互联网推广
  • 体育评论做的好的网站数据分析师培训
  • jsp动态网站开发环境搭配网站推广优化排名
  • 天津手机网站建设百度云盘搜索
  • 怎么把dw做的网站分享给别seo索引擎优化
  • 自己做网站php好做吗股票指数是什么意思
  • 有哪些网站可以免费免费发布平台
  • 网站图片移动怎么做的东莞seo计费管理
  • wordpress cdn加速新乡网站优化公司
  • 在线做c语言题目的网站淘宝关键词排名查询工具免费
  • 建设网站建设哪里好快速网站排名优化
  • 上海网站建设怎么谷歌优化怎么做
  • 专业网站建设制作多少钱已备案域名购买平台
  • 如何用cms做网站seo软文推广工具
  • 有链接的网站怎么做友链外链app
  • 做视频网站 带宽计算网上引流推广怎么做
  • 广州个人网站搭建网址查询站长工具
  • 做网站的公司还市场吗外链是什么
  • 四川建站百度网站链接提交入口