SpringCloud之Eureka服务治理中心

引用SpringCloud中文官网的一句话:

微服务架构集大成者,云计算最佳实践,搭建分布式、微服务项目的一站式框架

Eureka介绍:

主要用来实现服务的注册、发现

注册中心创建:

  • 1.创建第一个Springboot项目,作为注册中心,勾选cloudDescovry的:Eurekaserver
  • 2.在启动类上注解:@EnableEurekaServer //标记这是注册中心
  • 3.在application.yml中配置:
#端口号
server:
 port: 8761
eureka:
 instance:
#主机名称
  hostname: localhost
 client:
#自身不注册
   registerWithEureka: false
#不发现自身服务
   fetchRegistry: false
   serviceUrl:
#访问地址,高可用,支持集群,多个之间,隔开
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

spring:
  application:
#服务名称,强烈建议给每一个服务起个名字,含义为服务,要求不重复,这样就好区分
    name: server1803

注:测试时,一个项目中模拟启动多个注册中心,可copy启动方式(左上角减号右边按钮),在环境配置中Vm Options框填写:

-Dserver.port=8762

在这里插入图片描述

在yml的servicelUrl中配置集群,采用逗号隔开,当然,这里引用就不能写相同的端口了。
验证: http://localhost:8761

服务提供者创建:

  • 1、创建第二个springboot项目,作为提供者,勾选cloudDescovry的:Eurekaserver
  • 2、在启动类上注解:@EnableEurekaClient //标记这是客户端,提供者
  • 3、在application.yml中配置:
#设置端口
server:
  port: 9761

#连接数据库
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/sswd?useSSL=false
    username: root
    password: 123
    type: com.alibaba.druid.pool.DruidDataSource
  application:
    name: provider1803

#注册中心地址
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

因为springcloud的提供者提供的是接口,所以正常的书写mapper、service、controller的代码即可
等下需要在消费端service层配置映射的接口地址
验证:
在这里插入图片描述

点击后边的地址,得到如下
在这里插入图片描述
去掉后边的actuator/info,在地址后拼接上接口地址:
在实际开发中,都是指定前段域名部分为一个固定名称(需要配置),通过ip域名等方式访问,如:

http://kam1996:9691/wordlist.do?flag=1
在这里插入图片描述
注意:虽然这是数据接口,返回的是xml格式数据。但请不要直接在消费者中直接访问此路径,直接访问就相当于没走注册中心,也就 没有实现服务的发布与消费。

消费者创建:

  • 1、创建第三个Springboot项目,作为服务消费者勾选cloudDescovry的:Eurekaserver,同时勾选
    cloud routing中的ribbon或者feign,任选其一。两种实现消费者的方式不同,实现方式如下:
ribbon实现:
  • 2、在启动类上注解:
    @EnableEurekaClient//客户端 @EnableDiscoveryClient//发现服务

  • 3、在application.yml中配置:

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
spring:
  application:
    name: ribbon1803
server:
  port: 10762
  • 4、配置类RibbonConfig:
@Configuration
public class RibbonConfig {
    @Bean
    @LoadBalanced		//启用负载均衡
    public RestTemplate createTem(){
//交由ioc管理RestTemplate对象
        return new RestTemplate();
    }
}
  • 5、service中,注意是类class不是interface:
@Service
public class HiService {
    //注入ioc创建的resttemplate对象,由此对象的方法获取数据
    @Autowired
    private RestTemplate restTemplate;

    public String hi(){
//get请求通过get开头的方法,post通过post开头的方法,根据返回值不同,选择不同的方法即可
//这里的请求地址使用http://server-name,来代替http://ip:port,因为在ribbon中它会根据
// 服务名来选择具体的服务实例,根据服务实例在请求的时候会用具体的url替换掉服务名,这里请求的是http://provider1803/hello.do
        return restTemplate.getForObject("http://PROVIDER1803/hello.do",String.class);
    }
}
  • 6、controller正常调用
  • 7、验证:访问controller接口即可
feign实现:(推荐)
  • 1、在启动类上注解:
		@EnableEurekaClient//标记客户端
        @EnableDiscoveryClient//发现服务
        @EnableFeignClients//消费者模板
  • 2、在application.yml中配置:
     #注册中心地址
        eureka:
          client:
            serviceUrl:
              defaultZone: http://localhost:8761/eureka/
              
        spring:
          application:
          #服务名称
            name: feign1803
            
        server:
          #端口
          port: 10761

3、除了service层代码与之前有点不同,其他一样:

@FeignClient(value = "provider1803")
    public interface WordService {
        @RequestMapping(value = "/wordsave.do",method = RequestMethod.POST)
        public R save(@RequestBody Word word);
        @RequestMapping(value = "/wordlist.do",method = RequestMethod.GET)
        public List<Word> list(@RequestParam(value = "flag") int flag);
    }

解释注解:
@FeignClient(value = “provider1803”):
指明将要消费的服务名称

@RequestMapping(value = “/wordsave.do”,method = RequestMethod.POST):
指明提供者的controller中,书写的对应的数据接口,value和method要与提供者一致
方法,而方法的方法名和参数返回值等皆与提供者的方法参数返回值一致。在于对象上加上了@RequestBody 这样消费者才能访问到提供者接口。即两者之间是json格式传输的

@RequestParam(value = “flag”):
指定参数

4、Controller层

这里要提到@ResponseBody 注解,此 让我们的控制器不在调用viewresolve,而只是一个标记。至于消费接口返回的数据还是xml,我们可以在mapping注解里加上参数:

    produces = "application/json"

即可返回 json 格式的数据

验证:

http://localhost:10761/wordall.do?flag=1

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值