service clientjava
Service:提供服務的應用,端口是 808x的形式 Client:調用服務的應用 端口是809x的形式 整個程序以根據client端根據用戶id調用服務端程序返回用戶信息作示例。nginx
配置RestTemplateweb
@Configuration public class ConfigurationBean { private SimpleClientHttpRequestFactory getHttpRequestFactory(){ SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); factory.setConnectTimeout(10000); factory.setReadTimeout(10000); return factory;
調用方式spring
@RestController @RequestMapping("/client/user") public class UserApi { @Autowired private RestTemplate restTemplate; @RequestMapping("/{id}") public String getUser(@PathVariable("id") String id){ String forObject = restTemplate.getForObject("http://localhost:8081/user/1", String.class); return forObject; } }
分別啓動service和client,經過調用訪問http://localhost:8080/client/user/1,返回服務端數據,固然restTemplate還有不少其餘的方法可用,本身在實際使用的時候能夠去探究。shell
爲了解決不想寫死服務端的地址,而且能動態的切換對服務端機器的調用的問題,引入註冊中心的概念,提及來註冊中心,咱們一般會想起來zookeeper,可是spring cloud中並無採用zookeeper,而是採用了Eureka,zookeeper和Eureka對於保證CAP定理中的方式不一樣,zookeeper比較注重CP(一致性,分區耐受性),而對於Eureka來講重點保證AP(一致性和分區耐受性)。 註冊中心有了,那客戶端的請求是如何分發到相應某一臺服務器上呢,也許咱們用過nginx,nginx經過配置服務器的權重, ip hash或者隨機以及輪訓這些策略進行分配服務器,對於spring cloud 來講,幹這個活的是Ribbon。接下來就經過改造第一步的項目來讓它支持以上這些需求。 首先須要搭建一個EurekaServer,也就是註冊中心,和zookeeper是一個須要安裝的軟件不一樣,Eureka是一個內置在spring boot start中的一個應用程序,咱們只須要引入spring-boot-start-eureka,而後啓動項目便可。在這以前說一下EurekaServer和咱們應用程序的關係。 apache
EurekaServer 做爲註冊中心,接收服務端的註冊一級客戶端對服務端服務列表的請求, Eureka Client內嵌到應用程序中,用於註冊服務或者獲取服務。
搭建EurekaServer服務器
pom.xmlrestful
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.wtf.cloud</groupId> <artifactId>eureka-server</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>eureka-server</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.0.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <spring-cloud.version>Finchley.M8</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> <version>1.4.3.RELEASE</version> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-parent</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> </project>
main文件架構
@SpringBootApplication @EnableEurekaServer public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } }
配置文件 application.ymlapp
server: port: 8888 spring: application: name: eureka-server eureka: client: register-with-eureka: false fetch-registry: false serviceUrl: defaultZone: http://localhost:8888/eureka/
應用的端口爲8888
應用名稱:eureka-server 而後是配置eureka的相關東西 在默認設置下,改服務註冊中心也會將本身組委客戶端來嘗試註冊它本身,因此咱們須要禁止它的客戶端行爲
eureka.client.register-with-eureka=false
因爲該應用屬於註冊中心,因此設置爲false,表明不像註冊中心註冊本身
eureka.client.fetch-registry=false
因爲註冊中心的職責是維護服務實例,它並不須要去檢索服務,因此也設置爲false。 更多配置能夠參照EurekaInstanceConfigBean 和EurekaClientConfigBean
啓動服務訪問http://localhost:8888/ 能夠看到以下界面: