2020SpringCloud学习年终总结——第二章-微服务消费者

微服务概念

版本说明

  • cloud Hoxton.SR1
  • boot 2.2.2RELEASE
  • cloud alibaba 2.1.0 RELEASE
  • java java8
  • Maven 3.5以上
  • Mysql 5.7以上

客户端消费者 cloud-consumer-order80

  1. 因为是访问8001的服务,因此只需要一个controller就行了。

    @RestController
    @Slf4j
    public class OrderController {
        public static final String PAYMENT_URL = "http://localhost:8001";
    
        @Resource
        private RestTemplate restTemplate;
    
        @GetMapping("/consumer/payment/create")
        public CommonResult<Payment> create(Payment payment){
            return restTemplate.postForObject(PAYMENT_URL + "/payment/create",payment,CommonResult.class);
        }
        
        @GetMapping("/consumer/payment/get/{id}")
        public CommonResult<Payment> getPayment(@PathVariable("id") Long id){
            return restTemplate.getForObject(PAYMENT_URL+"/payment/get/"+id,CommonResult.class);
        }
    }
    
  2. 工程重构

需熟练掌握

知识点

  1. 什么是80端口?

    80端口是为HTTP(HyperText Transport Protocol)即超文本传输协议开放的,此为上网冲浪使用次数最多的协议,主要用于WWW(World Wide Web)即万维网传输信息的协议。
    可以通过HTTP地址(即常说的“网址”)加“: 80”来访问网站,因为浏览网页服务默认的端口号都是80,因此只需输入网址即可,不用输入“: 80”了。

  2. 什么是RestTemplate?

    RestTemplate提供了多种便捷访问远程Http服务的方法,是一种简单的访问restful服务模板类,是Spring提供的用于访问Rest服务的客户端模板工具集。

    • 例子

      @RestController
      public class TestController
      {
          @RequestMapping(value = "testPost", method = RequestMethod.POST)
          public ResponseBean testPost(@RequestBody RequestBean requestBean)
          {
              ResponseBean responseBean = new ResponseBean();
              responseBean.setRetCode("0000");
              responseBean.setRetMsg("succ");
      
              return responseBean;
          }
      }
      
      		//使用RestTemplate访问该服务
      		//请求地址
              String url = "http://localhost:8080/testPost";
              //入参
              RequestBean requestBean = new RequestBean();
              requestBean.setTest1("1");
              requestBean.setTest2("2");
              requestBean.setTest3("3");
      
              RestTemplate restTemplate = new RestTemplate();
              ResponseBean responseBean = restTemplate.postForObject(url, requestBean, ResponseBean.class);
      
      • 这三个参数分别代表 请求地址、请求参数、HTTP响应转换被转换成的对象类型。
  • RestTemplate对象的方法的名称遵循命名约定,第一部分指出正在调用什么HTTP方法,第二部分指示返回的内容。本例中调用了restTemplate.postForObject方法,post指调用了HTTP的post方法,Object指将HTTP响应转换为您选择的对象类型。
    • RestTemplate对象的方法还有getForObject与getForEntity,以及postForObject与postForEntity,其中包含Entity的方法的返回对象为ResponseEntity对象,包含了响应中的一些重要信息,比如响应头,响应状态码,响应体等
  1. @Configuration和@Bean组合使用如何工作?

    组合工作,起到applicationContext.xml 的效果。

    • 示例

      //bean类
      @Data
      public class TestBean{
      	private String username;
      	.....
      	public void sayHello() {
      		...
      	}
      }
      
      //配置类
      @Configuration
      public class TestConfiguration {
      	public TestConfiguration() {
      		System.out.println("配置类容器启动初始化。。。");
      	}
      	
      	@Bean//注册bean
      	public TestBean testBean() {
      		return new TestBean();
      	}
      }
      
      //主方法测试类
      
      public class TestMain {
      	public static void main(String args[]){
      		//@Configuration 注解的spring容器加载方式,用AnnotationConfigApplicationContext
      		ApplicationContext context = new AnnotationConfigApplicationContext(TestConfiguration.class);
      		
      		/*
      			如果是加载spring-context.xml文件,则语句应该是:(代替上面那句)
      			ApplicationContext context = new ClassPathXmlApplicationContext("spring-context.xml");
      		*/
      		
      		//获取bean
      		TestBean tb = (TestBean) context.getBean("testBean");
      		tb.sayHello();
      	}
      }
      
      • 在配置类中配置好bean后,也可以用@Autowired或者@Resource进行自动注入。
  2. @RequestBody

​ @RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的),通过HttpMessageConverter封装为具体的JavaBean。

@RestController
@Slf4j
public class PaymentController {
    @Resource
    private PaymentService paymentService;

    //前后端分离后,传参不能传到底了。传给前端的应该是json串

    @PostMapping(value="/payment/create")//为了满足RESTful框架原则(望文知意),不用@RequestMapping
    public CommonResult create(@RequestBody Payment payment){
        //@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的),通过HttpMessageConverter封装为具体的JavaBean
        int result = paymentService.create(payment);
        log.info("*****插入结果:"+result);

        if(result > 0){
            return new CommonResult(200,"插入数据库成果",result);
        }else{
            return new CommonResult(444,"插入数据库失败",null);
        }
    }
}
  1. maven项目中常用的周期clean,install,package,deploy。
    • clean:清除target目录;
    • install:将工程打包到本地仓库,这时本地项目可以依赖,别人依赖不了;
    • package:将项目中的各种文件,比如源代码,编译生成的字节码、配置文件、文档,按照规范的格式生成归档,最常见的当然就是JAR包和WAR包;

tips

  1. 当前主要module有:

    • cloud-api-commons
    • cloud-consumer-order80
    • cloud-provider-payment8001

    其中commons的module是为了避免代码冗余,将各个服务中重复的内容(如Entity,以及一些工具包utils内容放入commons中)。

    因此需要在其他调用这个module的pom文件中添加如下内容:

    		<!--引入自己定义的api通用包,也可以使用payment支付Entity-->
            <dependency>
                <groupId>com.atguigu.springcloud</groupId>
                <artifactId>cloud-api-commons</artifactId>
                <version>${project.version}</version>
            </dependency>
    

代码地址:https://github.com/AJ-Spade/cloud2020/tree/master

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值