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 

 

posted @ 2020-07-01 08:54  Dorom  阅读(132)  评论(0)    收藏  举报