springcloud-Eureka
项目结构
父工程依赖
<dependencyManagement> <dependencies> <!--springcloud依赖--> <!-- spring-cloud-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>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.6</version> </dependency> <!--springboot启动器 mybatis--> <!-- mybatis-spring-boot-starter --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> </dependency> <!--日志测试--> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.2.3</version> </dependency> <!--junit--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> </dependency> <!--lombok--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> </dependency> <!--log4j--> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> </dependencies> </dependencyManagement>
Eureka集群 修改本地hosts文件

配置
依赖
<dependencies> <!--eureka--> <!-https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> <version>1.4.6.RELEASE</version> </dependency> <!--Eureka-server--> <!-https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka-server --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> <version>1.4.6.RELEASE</version> </dependency> <!--热部署--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> </dependencies>
application.yml
server:
port: 7001
#Eureka配置
eureka:
instance:
hostname: eureka7001 #eureka实例名字
client:
register-with-eureka: true #表示是否向eureka注册中心注册自己 集群时需要相互注册
fetch-registry: false #是否检索注册中心内容
service-url: #监控页面
#单机: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka
#集群:
defaultZone: http://eureka7002:7002/eureka
启动类

7002注册中心只需要修改端口号。
消费提供者:

依赖
<dependencies> <!--需要拿到的实体类--> <dependency> <groupId>com.wenghuangge</groupId> <artifactId>springcloud-api</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <!--junit--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> <!--数据库--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> </dependency> <!--mybatis--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> </dependency> <!--test--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-test</artifactId> </dependency> <!--springweb启动器--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--热部署--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> <!--jetty--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jetty</artifactId> </dependency> <!--eureka--> <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> <version>1.4.6.RELEASE</version> </dependency> <!--actuator完善监控信息--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> </dependencies>
application.yml
server: port: 8001 #mybatis mybatis: type-aliases-package: com.wenghuangge.springcloud.pojo config-location: classpath:mybatis/mybatis-config.xml mapper-locations: classpath:mybatis/mapper/*.xml #spring配置 spring: application: name: springcloud-provider-test datasource: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: org.gjt.mm.mysql.Driver username: root password: root url: jdbc:mysql://localhost:3306/db01?serverTimezone=UTC&useUnicode=TRUE&characterEncoding=utf-8&useSSL=true #Eureka的配置 服务注册与发现 eureka: client: service-url: defaultZone: http://eureka7001:7001/eureka,http://eureka7002:7002/eureka instance: instance-id: springcloud-provider-dept8001 #修改eureka上的默认描述 #info配置 info: app.name: wenghuangge-springcloud company.name: hahaha.com
启动类:

消费者:

依赖:
<dependencies> <!--导入实体类--> <dependency> <groupId>com.wenghuangge</groupId> <artifactId>springcloud-api</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <!--web--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--热部署--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> <!--Ribon 负载均衡--> <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-ribbon --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId> <version>1.4.6.RELEASE</version> </dependency> <!--eureka--> <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> <version>1.4.6.RELEASE</version> </dependency> </dependencies>
application.yml
server:
port: 8002
#Eureka
eureka:
client:
fetch-registry: true
register-with-eureka: false
service-url:
defaultZone: http://localhost:7001/eureka
启动类:

springcloud-api:

Dept:
@Data @NoArgsConstructor @Accessors(chain = true)//链式写法 public class Dept implements Serializable{//Dept实体类 private Long deptno;//主键 private String dname;//部门名 //数据存在哪个数据库,一个服务对应一个数据库,同一个信息可能存在不同数据库 private String dbSource; public Dept(String dname) { this.dname = dname; } }
Ribbo方式调用:(通过服务名)
消费者:

configBean:
@Configuration public class ConfigBean { @Bean @LoadBalanced //Ribbon负载均衡 public RestTemplate getRestTemplate(){ return new RestTemplate(); } }
Controller:
@RestController public class DeptConsumerController { //RestTemplate 供我们直接调用 @Autowired private RestTemplate restTemplate;//提供多种便捷访问远程http的方法 //通过地址访问 //private static final String REST_URL_PREFFIX="http://localhost:8001"; //通过服务名访问 private static final String REST_URL_PREFFIX="http://SPRINGCLOUD-PROVIDER-TEST"; @RequestMapping("/consumer/dept/get/{id}") public Dept get(@PathVariable("id") Long id){ return restTemplate.getForObject(REST_URL_PREFFIX+"/dept/get/"+id, Dept.class); } @RequestMapping("/consumer/dept/add") public boolean add(Dept dept){ return restTemplate.postForObject(REST_URL_PREFFIX+"/dept/add", dept, Boolean.class); } @RequestMapping("/consumer/dept/list") public List<Dept> list(){ return restTemplate.getForObject(REST_URL_PREFFIX+"/dept/list", List.class); } }
Feign方式调用:(通过注解和接口) 通过feign注解的映射去找到提供者的方法
api项目

依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> <version>1.4.6.RELEASE</version> </dependency>
deptService加入@FeignClient注解 :根据接口的Mapping找到对应的提供者服务
@FeignClient(value = "SPRINGCLOUD-PROVIDER-TEST") public interface DeptService { @GetMapping("/dept/get/{id}") public Dept queryById(@PathVariable("id") Long id); @GetMapping("/dept/list") public List<Dept> queryAll(); @PostMapping("/dept/add") public Boolean addDept(Dept dept); }
消费者:
控制层:
@RestController public class DeptConsumerController { @Resource private DeptService deptService; @RequestMapping("/consumer/dept/get/{id}") public Dept get(@PathVariable("id") Long id){ return deptService.queryById(id); } @RequestMapping("/consumer/dept/add") public boolean add(Dept dept){ return deptService.addDept(dept); } @RequestMapping("/consumer/dept/list") public List<Dept> list(){ return deptService.queryAll(); } }
启动类:
@EnableEurekaClient //eureka客户端 @SpringBootApplication @EnableFeignClients(basePackages = {"com.wenghuangge.springcloud"}) //允许Feign public class DeptConsumer_8002 { public static void main(String[] args) { SpringApplication.run(DeptConsumer_8002.class, args); } }
遇到的问题:
1.集群中注册中心没有相互注册
解决方案:1.检查hostname是否一样 2. register-with-eureka=true

浙公网安备 33010602011771号