SpringCloud微服務大綱 01(idea篇)
- nslookup 域名(www.baidu.com) 檢視域名
微服務的概念?
將all in one 和 soa 框架的缺點都彌補了的框架結構
微服務是一種架構風格,一個大型複雜軟體應用由一個或多個微服務組成。系統中的各個微服務可被獨立部署,各個微服務之間是鬆耦合的。每個微服務僅關注於完成一件任務並很好地完成該任務。在所有情況下,每個任務代表著一個小的業務能力。
服務間可以通過“輕量級裝置與HTTP型API進行溝通”
服務之間可以通過註冊中心來註冊和發現
微服務框架對比!
consul:是google開源的一個使用go語言開發的服務發現、配置管理中心服務。內建了服務註冊與發現框 架、分佈一致性協議實現、健康檢查、Key/Value儲存、多資料中心方案,不再需要依賴其他工具(比如ZooKeeper等)。服務部署簡單
etcd:是一個高可用的鍵值儲存系統 由CoreOS開發並維護的, 主要用於共享配置和服務發現
dubbo:是 阿里巴巴公司開源的一個高效能優秀的服務框架,使得應用可通過高效能的 RPC 實現服務的輸出和輸入功能,可以和 Spring框架無縫整合。提供中文文件,更新不穩定
Springcloud:是一個基於Spring Boot實現的雲應用開發工具,它為基於JVM的雲應用開發中的配置管理、服務發現、斷路器、智慧路由、微代理、控制匯流排、全域性鎖、決策競選、分散式會話和叢集狀態管理等操作提供了一種簡單的開發方式。
服務發現
微服務的核心靈魂
springcloud元件
實現簡單的使用者微服務案例(zookepper,consul,eureka【預設】)
首先用idea新建一個maven專案
關聯依賴 注意這裡容易出現版本衝突問題,版本要先選好
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version >1.5.17.RELEASE</version>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
< version>Edgware.SR2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
控制中心模組建立
依賴管理
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
main方法
@SpringBootApplication
@EnableEurekaServer
public class Application {
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class).web(true).run(args);
}
}
資源source建議寫application.yml .,層次結構要分明:後面加個空格
server:
port: 8761
eureka:
instance:
#將來註冊到該註冊中心的微服務包括註冊中心都是用IP地址
preferIpAddress: true
hostname: localhost
client:
#是否註冊到註冊中心,註冊中心不需要自己註冊
registerWithEureka: false
#是否從註冊中心抓取註冊資訊,自己不需要抓取
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
然後可以執行,輸入localhost:8761進入微服務控制中心
成功進入頁面
微服務使用者建立
@SpringBootApplication
@EnableEurekaClient
@RestController
public class Application {
@RequestMapping("/")
public String home() {
return "Hello world";
}
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class).web(true).run(args);
}
}
配置檔案application.yml
server:
port: 8881
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
spring:
application:
#不要出現下劃線
name: userservice
datasource:
url: jdbc:mysql://localhost/unit02
username: root
password: ps123456
driver-class-name: com.mysql.jdbc.Driver
pom.xml 依賴管理
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.20</version>
<scope>provided</scope>
</dependency>
</dependencies>
根據架構寫一個使用者登入的service層
先看controller層
@RestController
public class UserController {
@Autowired
UserMapper userMapper;
@PostMapping("/validataUser")
public Result validataUser(@RequestBody User user){
List<User> query = userMapper.query(user.getUsername(), user.getPassword());
Result result=new Result();
System.out.println(query.size());
if(query.size()>0){
result.setCode(1);
result.setMsg("請輸入正確的賬號和密碼");
}
return result;
}
}
結果集實現,這裡的實現統一用了lombok小辣椒配件
idea的安裝流程https://mp.csdn.net/mdeditor/84666851#
@Data
@NoArgsConstructor
public class Result {
private int code;
private String msg;
private List data;
}
實體類user
```java
@Data
@NoArgsConstructor
public class User {
private String username;
private String password;
}
mapper介面對映
@Mapper
public interface UserMapper {
@Select("select * from user where username=#{username} and password=#{password}")
public List<User> query(@Param("username") String userName, @Param("password") String password);
}
然後在進入控制中心
這樣一個微服務就建立成功啦
在建立一個檢視層的微服務登入, 僅做參考
流程和上面的微服務差不多
這裡的entity複製過來就好
@Controller
public class UserController {
@Autowired
RestTemplate restTemplate;
@RequestMapping(value="/rlogin",method=RequestMethod.POST)
public String rlogin(User user){
String url="http://USERSERVICE/validataUser";
ResponseEntity<Result> resultResponseEntity = restTemplate.postForEntity(url, user, Result.class);
Result body = resultResponseEntity.getBody();
System.out.println(body.getCode());
return body.getCode()==1 ? "redirect:/suc.html" : "redirect:/login.html";
}
}
發現什麼不一樣了嗎?對的,不需要webapp這個檔案了,所有的html檔案一定要放在這裡,包名可以選擇用static或者public,建議用static,不然會掃描不到哦
application.yml
server:
#建議用80埠,我這是佔用了,就隨便取了一個
port: 8889
eureka:
instance:
#將來註冊到該註冊中心的微服務包括註冊中心都是用IP地址
preferIpAddress: true
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
#是否註冊到註冊中心,註冊中心不需要自己註冊
registerWithEureka: true
#是否從註冊中心抓取註冊資訊,自己不需要抓取
fetchRegistry: true
spring:
application:
#不要出現下劃線
name: userview
兩個html就不寫了,一個就寫個form表單提交,一個就提示一句登入成功就好啦