第3节课我们学习如何使用github上传我们的代码,现在我们要正式进入微服务篇。首先,我们要明确的是什么是微服务?
什么是微服务?
上面的这个图很清楚的向我们展示了什么是微服务,就是我们把一个项目拆成无数个小项目进行实现,比如就拿我们最熟悉的登入和注册操作来说。
相当于我们的登入和注册分别是两个不同的程序,分别可以对我们的数据库进行crud。
我们想实现这么一个需求,比如一个网站,很有可能一个人之前注册过了,后面忘记了。而自己又重新注册了一边,里面如果我们发现了,我们想在注册模块调用我们的登入模块。这就形成我们的微服务。
什么是springcloud?
springcloud是一系列实现微服务的技术总称
虽然实现的技术有多种多样,但是我们要做的事情如上图所示:
接下我们会一个个分别讲我们为什么要这么做,我们应该如何做。
服务注册和发现
一个项目肯定有若干个微服务在提供服务,而微服务之间可能有着相互调用的关系。如何管理,和调用这些服务就成了一个问题。加上,我们更加希望的是可以让多个服务器同时的提供相同的一个服务。而如何客户端需要调用的话,我们就可以让其中的一个服务器提供服务。
所以我就希望可以有一个控制中心来帮我们自动地进行轮询,自动的管理我们的微服务。
nacos闪亮登场!
D:\谷粒商城\大型电商--谷粒商城\1.分布式基础(全栈开发篇)\代码\springcloud\nacos-server-2.3.2\nacos\bin.
打开nacos存在的bin目录,打开该目录的控制台输入。
startup.cmd -m standalone
standalone的意思是以单例模式启动。启动后如下图。之后用阅览器打开。
之后出来这个:
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@EnableDiscoveryClient
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
首先,就是在java类中的主启动类里面加入
@EnableDiscoveryClient
接着配置自己的信息。
spring:
datasource:
username: root
password: root
url: jdbc:mysql://192.168.56.10:3306/username
driver-class-name: com.mysql.jdbc.Driver
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
application:
name: service_register
这样,我们就可以让我们的服务被发现了。
接下就是服务之间的互相调用了。
首先编写一个feign文件夹,定义调用接口。
具体结构代码结构如下
package com.example.demo.feign;
import com.example.demo.demo.common.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* 这是一个声明式的远程调用
*/
@FeignClient("你需要调用的那个程序在nacos上注册的服务名")
public interface loginFeignService {
@RequestMapping("/coupon/coupon/member/list")
public R membercoupons();
}
在启动类配置
@EnableFeignClients(basePackages = "该fegin借口所在的源根路径")
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
@EnableFeignClients(basePackages = "该fegin借口所在的源根路径")
@EnableDiscoveryClient
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
最后才能在你需要的地方进行调用
package com.example.demo.demo.controller;
import com.example.demo.demo.common.R;
import com.example.demo.demo.model.LoginRequest;
import com.example.demo.demo.service.LoginService;
import com.example.demo.feign.LoginFeignService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/user")
public class LoginController {
@Autowired
LoginService loginService;
@Autowired
LoginFeignService loginFeignService;
@PostMapping("/checkUsernameUsed")
public R login(@RequestBody LoginRequest loginRequest){
return loginService.getLogin(loginRequest);
}
@PostMapping("/Login")
public void login(){
loginFeignService.login();
}
}
总结想要远程调用别的服务 * 1)、引入open-feign * 2)、编写一个接口,告诉SpringCloud这个接口需要调用远程服务 * 1、声明接口的每一个方法都是调用哪个远程服务的那个请求 * 3)、开启远程调用功能