一,我們新建一個springboot項目
二,添加項目micro-provider,結構如下
三,代碼如下
package com.nl.provider.microprovider.controller; import com.nl.provider.microprovider.domain.ChatMsg; import com.nl.provider.microprovider.service.ChatMsgService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; @RestController public class ChatMsgController { @Autowired private ChatMsgService chatMsgService; @GetMapping("/Chat/GetModel/{id}") public ChatMsg GetModel(@PathVariable("id") Integer cId) { return chatMsgService.GetChatMsg(cId); } }
package com.nl.provider.microprovider.domain; import lombok.Getter; import lombok.Setter; @Getter @Setter public class ChatMsg { private Integer Id; private String Content; }
package com.nl.provider.microprovider.service.imp; import com.nl.provider.microprovider.domain.ChatMsg; import com.nl.provider.microprovider.service.ChatMsgService; import org.springframework.stereotype.Service; @Service public class ChatMsgServiceImp implements ChatMsgService { @Override public ChatMsg GetChatMsg(Integer Id) { ChatMsg chatMsg=new ChatMsg(); chatMsg.setId(1); chatMsg.setContent("111"); return chatMsg; } }
package com.nl.provider.microprovider.service; import com.nl.provider.microprovider.domain.ChatMsg; public interface ChatMsgService { ChatMsg GetChatMsg(Integer Id); }
package com.nl.provider.microprovider; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @SpringBootApplication @EnableDiscoveryClient public class MicroProviderApplication { public static void main(String[] args) { SpringApplication.run(MicroProviderApplication.class, args); } }
四,配置文件如下
application.yml
spring: application: name: provider cloud: zookeeper: connect-string: localhost:2181 logging: level: com.cloud.demo.microprovider.mapper: debug
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.6.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.nl.provider</groupId> <artifactId>micro-provider</artifactId> <version>0.0.1-SNAPSHOT</version> <name>micro-provider</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <!--spring cloud依賴管理--> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Finchley.SR2</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--<dependency>--> <!--<groupId>org.mybatis.spring.boot</groupId>--> <!--<artifactId>mybatis-spring-boot-starter</artifactId>--> <!--<version>1.3.2</version>--> <!--</dependency>--> <!--引入zookeeper--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zookeeper-all</artifactId> <exclusions> <exclusion> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.12</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> <!--<dependency>--> <!--<groupId>mysql</groupId>--> <!--<artifactId>mysql-connector-java</artifactId>--> <!--</dependency>--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <fork>true</fork> </configuration> </plugin> </plugins> </build> </project>
五,運行zookeeper,如下兩個程序
在 zkCli.cmd窗口輸入
敲一下命令,《provider》是自己在配置文件配置的名字
ls / ls /services ls /services/provider
得到如上結構,證明zk發現成功
六,發現失敗原因,在我們新建springboot項目的時候這個springboot版本是2.2.2,而現在springcloud支持的版本必須跟spring boot對應,要不然你會發現一直發現不了服務,如下2.2.2是對應不了我新增的
本文的配置是如下,
2》查看對應版本地址https://spring.io/projects/spring-cloud
七,添加多台微服務,如下,-Dserver.port=8082,原理是設置多個端口
啟動客戶端可以訪問發現,看客戶端的控制台輸出,發現三台,不同端口的服務
PS:經過測試,用springcloud做的負載,如果有一個服務端掛掉了,可是如果用戶接着訪問,就會出現第一次錯誤提示,如果用戶接着訪問,服務端就會自動切換到沒有掛掉的服務器
八,可是經過測試上文的pom.xml文件的zookeeper配置並不能連接遠程的zookeeper,那這個問題怎么解決呢?我們來替換掉遠程連接的zookeeper包
如下:
<!--僅僅適用於本地連接zookeeper--> <!--<dependency>--> <!--<groupId>org.springframework.cloud</groupId>--> <!--<artifactId>spring-cloud-starter-zookeeper-all</artifactId>--> <!--<exclusions>--> <!--<exclusion>--> <!--<groupId>org.apache.zookeeper</groupId>--> <!--<artifactId>zookeeper</artifactId>--> <!--</exclusion>--> <!--</exclusions>--> <!--</dependency>--> <!--<dependency>--> <!--<groupId>org.apache.zookeeper</groupId>--> <!--<artifactId>zookeeper</artifactId>--> <!--<version>3.4.12</version>--> <!--<exclusions>--> <!--<exclusion>--> <!--<groupId>org.slf4j</groupId>--> <!--<artifactId>slf4j-log4j12</artifactId>--> <!--</exclusion>--> <!--</exclusions>--> <!--</dependency>--> <!--僅僅適用於本地連接zookeeper--> <!--遠程連接zookeeper--> <!--Service Discovery with Zookeeper--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId> </dependency> <!--遠程連接zookeeper-->
這個時候我們就可以更改application.yml文件中的連接配置,如下
spring: cloud: zookeeper: connect-string: 192.168.30.145:2181 application: name: provider
九,運行看結果,連接成功