SpringBoot与分布式

SpringBootDubbozookeeper整合

1、准备两个项目,一个服务提供者,一个消费者

2、将服务提供者注册到注册中心

  (1) 引入dubbostarter

  (2) 引入zookeeper的客户端工具

  (3) application.yml中配置dubbo相关属性

  (4) 在要发布的类上标注上dubbo@Service注解并将类加入到容器

3、消费者使用服务者提供的功能(引用注册中心的服务)

  (1) 引入dubbostarter

  (2) 引入zookeeper的客户端工具

  (3) application.yml中配置dubbo相关属性

  (4) 远程调用发布到注册中心的类

引入dubbostarter

<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>0.1.0</version>
</dependency>

引入zookeeper的客户端工具zkclient

<dependency>
    <groupId>com.101tec</groupId>
    <artifactId>zkclient</artifactId>
    <version>0.10</version>
</dependency>

application.yml中配置dubbo相关属性

dubbo:
  application:
    name: provider-ticket    # 项目的名字
  registry:
    address: zookeeper://172.17.121.58:2181   # 注册中心zookeeper的地址
  scan:
    base-packages: com.jinxin.task.controller   # 指定发布的包

在要发布的类上标注上dubbo@Service注解并将类加入到容器

@Component   // 加到容器中
@Service    // 导入dubbo的service将服务发布出去
public class DubboService {

配置消费者的dubbo相关属性

dubbo:
  application:
    name: provider-ticket    # 项目的名字
  registry:
    address: zookeeper://172.17.121.58:2181   # 注册中心zookeeper的地址

远程调用注册中心的类

  • 首先需要复制一份跟服务者相同目录的包,带上刚刚发布到的服务中心的DubboService的接口
  • 然后使用@Reference远程调用DubboService即可
@Reference
DubboService dubboService;

Spring Boot和Spring Cloud

spring cloud分布式开发五大常用组件

  • 服务发现——Netflix Eureka
  • 客服端负载均衡——Netflix Ribbon
  • 断路器——Netflix Hystrix
  • 服务网关——Netflix Zuul
  • 分布式配置——Spring Cloud Config

选择Eureka-Server,这个项目用来做注册中心

启用注册中心

1、配置Eureka信息

server:
  port: 8761
eureka:
  instance:
    hostname: eureka-server   # eureka实例的主机名
  client:
    register-with-eureka: false  # 不把自己注册到eureka上
    fetch-registry: false   # 不从eureka上获取服务的注册信息
    service-url:
      defaultZone: http://localhost:8761/eureka/   # 注册中心的地址

2、在主配置类上加上@EnableEurekaServer

@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

之后就可以访问localhost:8761来到eureka服务中心页面了

选择Eureka-Discovery,这个项目用来做注册服务

配置服务提供者信息

server:
  port: 8001
spring:
  application:
    name: provide-ticket   # 提供者名字

eureka:
  instance:
    prefer-ip-address: true    # 注册服务时使用服务的ip地址进行注册
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/   # 注册中心的地址

然后启动项目就可以注册到的服务中心了

现在配置一个方法返回一个字符串,因为消费者是通过http请求来去请求中心获取数据的,所以写一个controller

@GetMapping("/ticket")
public String getTicket(){
    return "《厉害了,我的国》";
}

选择Eureka-Discovery,这个项目用来做服务消费者

配置消费者信息,跟配置服务者相同

server:
  port: 8200


spring:
  application:
    name: consumer-user

eureka:
  instance:
    prefer-ip-address: true    # 注册服务时使用服务的ip地址进行注册
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/   # 注册中心的地址

在主程序类中开启发现服务的功能跟注册RestTemplate

@EnableDiscoveryClient    // 开启发现服务功能
@SpringBootApplication
public class ConsumerUserApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConsumerUserApplication.class, args);
    }

    @LoadBalanced    // 启用负载均衡机制,如果有多个服务提供者,会轮询着访问
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

去注册中心获取数据

@RestController
public class BuyTicket {
    @Autowired
    RestTemplate restTemplate;

    @GetMapping("buy")
    public String buyTicket(String name){
        // 发送http请求获取数据
        String ticket = restTemplate.getForObject("http://PROVIDE-TICKET/ticket", String.class);
        return name + "购买了" + ticket;
    }
}

 

posted @ 2018-09-20 13:41  Jin同学  阅读(188)  评论(0)    收藏  举报