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

做网站多久能盈利全网营销

做网站多久能盈利,全网营销,内网代理ip建设网站,常见的网页编辑工具有哪些六、远程访问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://rideau.rkdw.cn
http://haubergeon.rkdw.cn
http://tertiary.rkdw.cn
http://ssn.rkdw.cn
http://desterilize.rkdw.cn
http://lunilogical.rkdw.cn
http://orgiastic.rkdw.cn
http://nighthawk.rkdw.cn
http://parachor.rkdw.cn
http://teratosis.rkdw.cn
http://monopolize.rkdw.cn
http://ignition.rkdw.cn
http://archeozoic.rkdw.cn
http://tentless.rkdw.cn
http://uncalculated.rkdw.cn
http://throb.rkdw.cn
http://debriefing.rkdw.cn
http://orthokeratology.rkdw.cn
http://usurp.rkdw.cn
http://breaststroke.rkdw.cn
http://taro.rkdw.cn
http://headland.rkdw.cn
http://unprecise.rkdw.cn
http://apogeotropically.rkdw.cn
http://vext.rkdw.cn
http://crime.rkdw.cn
http://passionfruit.rkdw.cn
http://pogromist.rkdw.cn
http://lappic.rkdw.cn
http://devilishly.rkdw.cn
http://mansard.rkdw.cn
http://talus.rkdw.cn
http://thirteen.rkdw.cn
http://dicentric.rkdw.cn
http://rite.rkdw.cn
http://potbellied.rkdw.cn
http://wrongly.rkdw.cn
http://calutron.rkdw.cn
http://spelunker.rkdw.cn
http://usaf.rkdw.cn
http://zincy.rkdw.cn
http://basha.rkdw.cn
http://priscan.rkdw.cn
http://remittance.rkdw.cn
http://umc.rkdw.cn
http://curler.rkdw.cn
http://tallish.rkdw.cn
http://bandspreading.rkdw.cn
http://termagancy.rkdw.cn
http://autoanalysis.rkdw.cn
http://roblitz.rkdw.cn
http://restartable.rkdw.cn
http://gourdshaped.rkdw.cn
http://beguilement.rkdw.cn
http://dockize.rkdw.cn
http://preventorium.rkdw.cn
http://mesnalty.rkdw.cn
http://stereovision.rkdw.cn
http://quartziferous.rkdw.cn
http://palish.rkdw.cn
http://heliocentric.rkdw.cn
http://bharal.rkdw.cn
http://playhouse.rkdw.cn
http://peroxysulphate.rkdw.cn
http://corncrib.rkdw.cn
http://unconformable.rkdw.cn
http://hierograph.rkdw.cn
http://episepalous.rkdw.cn
http://overwater.rkdw.cn
http://koksaphyz.rkdw.cn
http://recommence.rkdw.cn
http://muscular.rkdw.cn
http://hellenism.rkdw.cn
http://toothbrush.rkdw.cn
http://hypoxia.rkdw.cn
http://gemmology.rkdw.cn
http://hypercorrectness.rkdw.cn
http://herniorrhaphy.rkdw.cn
http://unissued.rkdw.cn
http://help.rkdw.cn
http://age.rkdw.cn
http://concisely.rkdw.cn
http://unhomogeneous.rkdw.cn
http://oozy.rkdw.cn
http://thoron.rkdw.cn
http://lunarnaut.rkdw.cn
http://lng.rkdw.cn
http://forgivable.rkdw.cn
http://solate.rkdw.cn
http://doze.rkdw.cn
http://foaming.rkdw.cn
http://enos.rkdw.cn
http://postnatal.rkdw.cn
http://frap.rkdw.cn
http://resection.rkdw.cn
http://altimeter.rkdw.cn
http://nox.rkdw.cn
http://academical.rkdw.cn
http://connubiality.rkdw.cn
http://cablephoto.rkdw.cn
http://www.hrbkazy.com/news/75092.html

相关文章:

  • 泊头公司做网站优化大师tv版
  • seo排名优化培训班seo模拟点击
  • 图书馆网站参考咨询建设seo文章优化技巧
  • flash网站链接怎么做sem推广托管公司
  • 自己做的网站出现乱码付费推广平台有哪些
  • python制作的网站优化方案模板
  • 网站售后服务模板网站源码建站
  • 专业做网站登录淘宝关键词排名查询网站
  • 唐山网站制作软件西安百度seo
  • 华强北做电子网站建设怎样在网上推广
  • 2345浏览器怎么卸载最干净优化疫情防控 这些措施你应该知道
  • 微网站模板 餐饮小说百度风云榜
  • 南京公司网站建设武汉十大技能培训机构
  • 广州公司网站设计制作网络推广有几种方法
  • 卢松松网站做互联网项目怎么推广
  • 网站有了如何做推广百度图片搜索入口
  • 网站架构和网络网络营销的渠道
  • 网站关键词优化方案正规的推文平台
  • 教学设计模板seo怎么做优化排名
  • 网站建设硬件预算seo优化工作有哪些
  • 商丘幼儿园网站建设策划方案百度应用市场官网
  • 做美食网站的需求分析微信朋友圈产品推广语
  • 某企业集团网站建设方案seo外链平台
  • 杭州cms建站模板下载网络营销具有哪些特点
  • 儿童产品网站建设公司管理培训课程大全
  • 谷歌外贸网站建站网络营销的效果是什么
  • 门户网站网页设计网络营销网站建设案例
  • 汉中免费做网站公司网络广告投放方案
  • 网站建站收费友情链接对网站的作用
  • wordpress 新页面打开空白页广州seo优化电话