一、首先创建一个没有架骨的maven主项目
- 点击下一步创建
创建完成后在maven主项目下删除src并且创建四个maven副项目分别叫:
-
demospringcloud-api--------连接实例
-
demospringcloud-cosumer---------消费类
-
demospringcloud-eureka---------注册类
-
demospringcloud-provider---------服务类
-
打开主项目中的pom文件添加引用
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--Springboot依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.4.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-maven-plugin</artifactId>
<version>1.18.12.0</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
</dependencies>
二、接下来在demospringcloud-api中创建实体类以供我们测试
内容:
package com.demospringcloud.entiy;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class StudentEntity implements Serializable {
private String id;
private String name;
private int age;
}
三、配置Eureka:
步骤:
1.首先需要将你的demospringcloud-eureka项目变成springboot项目这里用到的包前面已经引入过了不用在子项目中重新引用了
2.然后就是注意的地方 你需要在本机的host文件中增加一个配置信息或者多个 因为后面会写集成多个Eureka注册中心的配置我电脑是win10的系统文件目录在:
C:\Windows\System32\drivers\etc
在下面增加一句话:
127.0.0.1 localhost1.com
127.0.0.1 localhost2.com
127.0.0.1 localhost3.com
如果是配置多个的话就增加多点 我目前配置了3个用来演示
那么现在先给大家配置一个:
首先需要创建一个普通的Java文件然后创建一个springboot的配置文件 如图:
编辑当前springcloud文件:
package springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class springcloud {
public static void main(String[] args) {
SpringApplication.run(springcloud.class,args);
}
}
编辑完成后你的这个子项目就变成一个springboot的项目了下面就是配置yml文件:
注意:我这边的hostname是我在我本机更改完host文件以后添加的配置域名,端口号7001是官方默认的你也可以自己更改
server:
port: 7001
eureka:
instance:
hostname: localhost1.com
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka
四、配置服务类
配置好Eureka注册中心后在demospringcloud-provider中创建一个controller,并且将demospringcloud-provider这个类变为springboot项目如图创建:
然后打开demospringcloudprovider添加:
package demospringcloudprovider;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
//将项目变为springboot项目
@SpringBootApplication
//打开enableeureka服务端
@EnableEurekaClient
public class demospringcloudprovider {
public static void main(String[] args) {
SpringApplication.run(demospringcloudprovider.class,args);
}
}
controller中添加完成Student类后编辑:
package demospringcloudprovider.controller;
//引入当前文件项目中的实体类
import com.demospringcloud.entiy.StudentEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
@RestController
public class Student {
@GetMapping("/Get")
public List<StudentEntity> Get() {
List<StudentEntity> list=new ArrayList<StudentEntity>();
list.add(1,new StudentEntity("1001","大娃",12));
list.add(2,new StudentEntity("1002","二娃",15));
list.add(3,new StudentEntity("1003","六娃",18));
list.add(4,new StudentEntity("1004","七娃",19));
return list;
}
}
最后编辑application.yml文件配置:
server:
port: 8081
spring:
application:
name: demospringcloud-provider-8081
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka
声明:如果你引入当前文件项目中的实体类后你的demospringcloud-provider项目的pom文件中会多出来一个引入:
<dependencies>
<dependency>
<groupId>com.chinadic</groupId>
<artifactId>demospringcloud-api</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>
五、初步测试:
首先运行Eureka注册类demospringcloud-eureka------------>其次运行服务类demospringcloud-provider
注意:可以先打开demospringcloud-eureka测试连接
在网页中输入地址: localhost:7001 看看是否能够进入
这时候需要注意 不要管我的中间那一部分你们应该看不到,这个是后面集成多个成功后的界面
只要能进入这个网页后就再启动demospringcloud-provider
成功后中间的
Insatances currently registered with Eureka
里面应该会有你的provider服务类的接口信息
六、配置消费类
配置这个消费类时我不太喜欢传统的配置方法 那种方法比较麻烦我这边使用了熔断器需要再消费类demospringcloud-cosumer的pom文件中添加:
不说那么多了先看目录:
编辑configBean
package demospringcloudconsumer.config;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class ConfigBean {
@LoadBalanced
@Bean
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
编辑StudentContoller
package demospringcloudconsumer.controller;
import com.demospringcloud.service.IStudent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import java.util.List;
@RestController
@CrossOrigin
public class StudentContoller {
@Autowired
private IStudent iStudent;
@RequestMapping(value = "/Get",produces = "text/html;charset=utf-8")
public List getRestTemplate(){
return iStudent.Get();
}
}
EurekaCAP原则
C : 强一致性
A :可用性
P :分区容错性
CAP核心理论 :
一个分布式系统不可能同事很好的满足一致性,可用性和分区容错性这三个需求
根据Cap原理,将NOSQL数据库分成了满足CA原则 满足CP原则 和满足AP原则三大类
CA :单点集群满足一致性可用性的系统 通常可扩展性比较差
CP :满足一致性 分区容错性的系统 通常性能不是特别高
AP :满足可用性 分区容错性的系统,通常可能对一致性要求低一些