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

怎么做网站优化排名自助建站系统软件

怎么做网站优化排名,自助建站系统软件,房地产网站建设内容,管理咨询公司名字起名大全前面我们讲了一下 Ribbon 和 RestTemplate 实现服务端通信的方法#xff0c;Ribbon 提供了客户端负载均衡#xff0c;而 RestTemplate 则对 http 进行封装#xff0c;简化了发送请求的流程#xff0c;两者互相配合#xff0c;构建了服务间的高可用通信。 但在使用后也会发…前面我们讲了一下 Ribbon 和 RestTemplate 实现服务端通信的方法Ribbon 提供了客户端负载均衡而 RestTemplate 则对 http 进行封装简化了发送请求的流程两者互相配合构建了服务间的高可用通信。 但在使用后也会发现RestTemplate 只是对 HTTP 做了简单的封装像发送请求的 URL、参数、请求头、请求体这些细节都需要我们自己处理如此底层的操作都暴露出来肯定是不利于团队间协作的因此就需要一种封装度更高使用更简单的技术来屏蔽通信底层的复杂度这里就来到了我们这篇文章介绍的重点了OpenFeign 技术。 为了便于理解我们这里通过一个具体的案例来配合理解。 一、案例背景 在某电商平台的订单业务中为了保证商品不超卖我们需要在下单时查询商品库存如有库存则创建订单继续支付流程如果库存为 0则提示用户库存不足无法下单。这里我们来定义订单服务order-service和仓储服务warehouse-service。总体流程如下 在上述业务中订单服务是依赖仓储服务的那仓储服务就是服务提供者订单服务就是服务消费者梳理清思路后我们来使用代码还原这个场景。 二、创建服务提供者warehouse-service 仓储服务做为服务提供者就是标准的 springboot 工程我们先创建一个 springboot 工程。 1、工程创建 利用 Spring Initializr 向导创建 warehouse-service 工程前面文章有创建步骤不明白的可以去看一下。确保在创建后的 pom.xml 中有如下引用 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId/dependency2、配置注册中心 在创建好的工程中的 application.yml 文件中新增 Nacos 通信配置。 spring:application:name: warehouse-service #应用/微服务名字cloud:nacos:discovery:server-addr: 106.14.221.171:8848 #nacos服务器地址username: nacos #用户名密码password: nacosserver:port: 803、创建库存实体类 创建库存实体类保存库存信息。 package com.example.warehouseservice.dto;//库存商品对象public class Stock {private Long skuId; //商品品类编号private String title; //商品与品类名称private Integer quantity; //库存数量private String unit; //单位private String description; //描述信息//带参构造函数public Stock(Long skuId, String title, Integer quantity, String unit) {this.skuId  skuId;this.title  title;this.quantity  quantity;this.unit  unit;}//getter and setter省略...}4、创建控制器controller 创建仓储服务控制器 WarehouseController通过一个 getStock方法传入商品编号返回具体的库存数据。我们这里采用数据模拟的方式定义两个商品库存编号为1101 的是紫色 256G iPhone15库存 32 台编号1102 的是白色 256G iPhone15库存为 0。 package com.example.warehouseservice.controller;//省略 import 部分//仓储服务控制器RestControllerpublic class WarehouseController {/*** 查询对应 skuId 的库存状况* param skuId skuId* return Stock 库存对象*/GetMapping(/stock)public Stock getStock(Long skuId){Map result  new HashMap();Stock stock  null;if(skuId  1101l){//模拟有库存商品stock  new Stock(1101l, Apple iPhone 15 128GB 紫色, 32, 台);stock.setDescription(Apple 11 紫色版对应商品描述);}else if(skuId  1102l){//模拟无库存商品stock  new Stock(1101l, Apple iPhone 15 256GB 白色, 0, 台);stock.setDescription(Apple 11 白色版对应商品描述);}else{//演示案例暂不考虑无对应 skuId 的情况}return stock;}}5、服务启动 上述代码完成后我们打包部署到服务器上启动成功后可以在 Nacos 注册中心中看到注册状态 再在浏览器中访问 url 来查看服务返回的数据 http://192.168.3.2/stock?skuId1101{skuId: 1101,title: Apple iPhone 15 128GB 紫色,quantity : 32,unit: 台,description:Apple 11 紫色版对应商品描述}至此我们服务提供者 warehouse-service 就开发完成了下面我们来开发服务消费者。 三、创建服务消费者order-service 1、工程创建 我们还是使用 Spring initializr 创建一个 order-service 工程并确保 pom.xml 中引入如下包 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId/dependencydependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactIdversion2.2.5.RELEASE/version/dependency2、启用 OpenFeign 创建完并添加好工程依赖包后我们需要在应用入口 OrderServiceApplication 中添加EnableFeignClients 注解这里是为了通知 Spring 启用 OpenFeign 声明式通信。 package com.example.orderservice;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.openfeign.EnableFeignClients;SpringBootApplicationEnableFeignClients //启用OpenFeignpublic class OrderServiceApplication {public static void main(String[] args) {SpringApplication.run(OrderServiceApplication.class, args);}}3、配置 Nacos 默认的 OpenFeign 并不需要任何的配置我们在 application.yml 配置一下 Nacos。 spring:application:name: order-servicecloud:nacos:discovery:server-addr: 106.14.221.171:8848username: nacospassword: nacosserver:port: 804、创建 OpenFeign 通信接口和响应对象 package com.example.orderservice.feignclient;import com.example.orderservice.dto.Stock;import org.springframework.cloud.openfeign.FeignClient;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestParam;FeignClient(warehouse-service)public interface WarehouseServiceFeignClient {GetMapping(/stock)public Stock getStock(RequestParam(skuId) Long skuId);}在 order-service 工程下创建一个 feignclient 包用于保存通信接口。OpenFeign 通过“接口注解”形式描述数据传输逻辑并不需要我们编写具体实现代码便能实现服务间高可用通信。 FeignClient 注解说明当前接口为 OpenFeign 通信客户端参数值 warehouse-service 为服务提供者 ID这一项必须与 Nacos 注册 ID 保持一致。在 OpenFeign 发送请求前会自动在 Nacos 查询 warehouse-service 所有可用实例信息再通过内置的 Ribbon 负载均衡选择一个实例发起 RESTful 请求进而保证通信高可用. package com.lagou.orderservice.dto;//消费者端接收响应Stock对象public class Stock {private Long skuId; //商品品类编号private String title; //商品与品类名称private Integer quantity; //库存数量private String unit; //单位Overridepublic String toString() {return Stock{ skuId  skuId , title  title   , quantity  quantity , unit  unit   };}//getter与setter省略}声明的方法结构接口中定义的方法通常与服务提供者的方法定义保持一致。这里有个非常重要的细节用于接收数据的 Stock 对象并不强制要求与提供者端 Stock 对象完全相同消费者端的 Stock 类可以根据业务需要删减属性但属性必须要与提供者响应的 JSON 属性保持一致。距离说明我们在代码发现消费者端 Stock 的包名与代码与提供者都不尽相同而且因为消费者不需要 description 属性便将其删除其余属性只要保证与服务提供者响应 JSON 保持一致在 OpenFeign 获取响应后便根据 JSON 属性名自动反序列化到 Stock 对象中。 5、接口注入远程调用 在消费者 Controller 中对 FeignClient 接口进行注入像调用本地方法一样调用即可。 package com.example.orderservice.controller;import com.example.orderservice.dto.Stock;import com.example.orderservice.feignclient.WarehouseServiceFeignClient;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;import java.util.LinkedHashMap;import java.util.Map;RestControllerpublic class OrderController {//利用Resource将IOC容器中自动实例化的实现类对象进行注入Resourceprivate WarehouseServiceFeignClient warehouseServiceFeignClient;/*** 创建订单业务逻辑* param skuId 商品类别编号* param salesQuantity 销售数量* return*/GetMapping(/create_order)public Map createOrder(Long skuId , Long salesQuantity){Map result  new LinkedHashMap();//查询商品库存像调用本地方法一样完成业务逻辑。Stock stock  warehouseServiceFeignClient.getStock(skuId);System.out.println(stock);if(salesQuantity  stock.getQuantity()){//创建订单相关代码此处省略//CODESUCCESS代表订单创建成功result.put(code , SUCCESS);result.put(skuId, skuId);result.put(message, 订单创建成功);}else{//codeNOT_ENOUGN_STOCK代表库存不足result.put(code, NOT_ENOUGH_STOCK);result.put(skuId, skuId);result.put(message, 商品库存数量不足);}return result;}}6、部署测试 将消费者部署后我们尝试调用消费者的创建订单接口如传入 1101 编号则会出现以下返回 http://192.168.3.3/create_order?skuId1101salesQuantity1{code: SUCCESS,skuId: 1101,message: 订单创建成功}如传入 1102 编号则会出现以下返回 http://192.168.3.3/create_order?skuId1102salesQuantity1{code: NOT_ENOUGH_STOCK,skuId: 1102,message: 商品库存数量不足}这里已经基于 OpenFeign 实现了服务间通信。 到这里我们 SpringCloud 集成 OpenFeign 的工作就完成了大家可以按照自己的业务愉快的撸码了。
http://www.pierceye.com/news/922874/

相关文章:

  • 百度推广官方网站登录入口一个人制作网站
  • 重庆市建设公共资源交易中心网站首页当地人做导游的旅游网站
  • 北京网站建设收费龙溪网站制作
  • 佛山小企业网站建设郑州做网站销售怎么样
  • 招考网站开发如何创建一个自己的网页
  • 做网站一般链接什么数据库wordpress 504错误
  • 网站阵地建设江门网站建设工作
  • 汽车网站建设策划方案24小时永久有效在线观看
  • 潍坊做网页的公司潍坊网站排名优化
  • 中建铁路建设有限公司网站微信群营销工具
  • 单位网站建设意见建议百度关键词检测工具
  • 重庆网站建设方案书免费网上咨询医生是哪个网
  • 临沂市开发区可以做分销的网站网络域名综合查询
  • 建设银行企业网银网站过期银州手机网站建设
  • 导航网站 win8风格企业服务官网
  • 樟树有哪几个网站做爆药库在线制作图片视频生成器
  • 汕头网站定制青年汇网站开发公司
  • 厦门专业网站设计公司防控措施持续优化
  • wordpress子网站杭州化工网站建设
  • 怎样做网站 - 百度兰州家政公司
  • 网站上的字体大小福建省建设注册执业管理中心网站
  • 七台河做网站手机wap浏览器
  • 最新手机网站推荐哪个推广平台效果好
  • 百度官方网站关键词营销seo
  • 网站建设开发流程做网站的毕业设计
  • 网站模块wordpress图片多选
  • 济源市住房和城乡建设局网站公示聊城市城乡建设部网站查询
  • 阿里网 网站备案流程长春公司网站建设
  • 临沂做商城网站设计网站设计 线框图 怎么画
  • 台江网站建设建设网站的意义