微服务概念
版本说明
- cloud Hoxton.SR1
- boot 2.2.2RELEASE
- cloud alibaba 2.1.0 RELEASE
- java java8
- Maven 3.5以上
- Mysql 5.7以上
客户端消费者 cloud-consumer-order80
-
因为是访问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); } }
-
工程重构
需熟练掌握
知识点
-
什么是80端口?
80端口是为HTTP(HyperText Transport Protocol)即超文本传输协议开放的,此为上网冲浪使用次数最多的协议,主要用于WWW(World Wide Web)即万维网传输信息的协议。
可以通过HTTP地址(即常说的“网址”)加“: 80”来访问网站,因为浏览网页服务默认的端口号都是80,因此只需输入网址即可,不用输入“: 80”了。 -
什么是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对象,包含了响应中的一些重要信息,比如响应头,响应状态码,响应体等
-
@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进行自动注入。
-
-
@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);
}
}
}
- maven项目中常用的周期clean,install,package,deploy。
- clean:清除target目录;
- install:将工程打包到本地仓库,这时本地项目可以依赖,别人依赖不了;
- package:将项目中的各种文件,比如源代码,编译生成的字节码、配置文件、文档,按照规范的格式生成归档,最常见的当然就是JAR包和WAR包;
tips
-
当前主要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