一.服務的注冊與發現(Eureka)
spring cloud 為開發人員提供了快速構建分布式系統的一些工具,包括配置管理、服務發現、斷路器、路由、微代理、事件總線、全局鎖、決策競選、分布式會話等等
1. 主項目:版本控制
Springboot集中聲明
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.4.RELEASE</version> <relativePath/> </parent>
Springcloud版本
<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
主項目管理的依賴Jar:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
Springboot組件:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
2.創建2個model工程
一個model工程作為服務注冊中心,即Eureka Server,另一個作為Eureka Client。
1)創建服務注冊中心(Eureka Server)
項目架構:
引入主項目:
<parent> <groupId>com.fsdm</groupId> <artifactId>SpringCloud_test1</artifactId> <version>1.0-SNAPSHOT</version> </parent>
引入spring-cloud-starter-netflix-eureka-server的依賴:
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> </dependencies>
Application啟動類:
@EnableEurekaServer @SpringBootApplication public class Demo1Application { public static void main(String[] args) { SpringApplication.run(Demo1Application.class, args); } }
注解解析:
@SpringBootApplication
1. 復合注解主要包括@ComponentScan,和@SpringBootConfiguration,@EnableAutoConfiguration。
2. @SpringBootConfiguration標注當前類是配置類
3. @EnableAutoConfiguration啟動自動的配置,根據你添加的jar包來配置你項目的默認配置
4. @EnableAutoConfiguration掃描當前包及其子包下被@Component,@Controller,@Service,@Repository注解標記的類並納入到spring容器中進行管理
@EnableEurekaServer
1. 表明這是一個EurekaServer(服務注冊中心)
2. 配合yml文件使用:
Eureka:
Client:
registerWithEureka: false fetchRegistry: false
yml配置:
server: port: 8761 eureka: instance: hostname: localhost client: # 表明自己是一個eureka server. registerWithEureka: false fetchRegistry: false serviceUrl: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ spring: application: name: eurka-server
啟動程序,訪問http://localhost:8761/
當client向server注冊時,它會提供一些元數據,例如主機和端口,URL,主頁等。Eureka server 從每個client實例接收心跳消息。 如果心跳超時,則通常將該實例從注冊server中刪除。
No application available 表示沒有服務被發現
因為我們還沒有注冊服務當然沒有發現服務啦,
2)創建一個服務提供者 (eureka client)
項目架構:
引入主項目:
<parent> <groupId>com.fsdm</groupId> <artifactId>SpringCloud_test1</artifactId> <version>1.0-SNAPSHOT</version> </parent>
需要的jar以及組件:
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
Application啟動類:
@SpringBootApplication @EnableEurekaClient @RestController public class Demo2Application { public static void main(String[] args) { SpringApplication.run(Demo2Application.class, args); } @Value("${server.port}") String port; @RequestMapping("/hi") public String home(@RequestParam String name) { return "hi "+name+",i am from port:" +port; } }
注解解析:
@EnableEurekaClient
1. 表明這是一個EurekaClient(服務提供者)
2. 基於spring-cloud-netflix,只能為eureka作用。
@RestController
1. 復合注解主要包括@Controller和@ResponseBody
2. 標注controller層,可供url訪問
3. 無法返回jsp頁面,或者html,配置的視圖解InternalResourceViewResolver不起作用,返回的內容就是Return 里的內容。
yml配置:
server: port: 8762 spring: application: #工程名稱 name: service-hi eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/
需要指明spring.application.name,這個很重要,這在以后的服務與服務之間相互調用一般都是根據這個name 。
啟動這個項目,刷新http://localhost:8761/
發現一個服務已經注冊在服務中了,服務名為SERVICE-HI ,端口為8762
你會發現一個服務已經注冊在服務中了,服務名為SERVICE-HI
關於紅色字體的警告解釋:
https://www.cnblogs.com/breath-taking/articles/7940364.html
訪問http://localhost:8762/hi?name=fsdm
未完,待續。。。