sbc(一)SpringBoot+SpringCloud初探(下)

简介: 有看过我之前的SSM系列的朋友应该有一点印象是非常深刻的。 那就是需要配置的配置文件非常多,什么Spring、mybatis、redis、mq之类的配置文件非常多,并且还存在各种版本,甚至有些版本还互不兼容。其中有很多可能就是刚开始整合的时候需要配置,之后压根就不会再动了。

使用SpringCloud进行分布式调用


搭建eureka注册中心


既然是要搭建微服务那自然少不了注册中心了,之前讲的dubbo采用的是zookeeper作为注册中心,SpringCloud则采用的是Netflix Eureka来做服务的注册与发现。

新建一个项目sbc-service,目录结构如下:


springBoot03.jpg


核心的pom.xml


<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka-server</artifactId>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.2.1</version>
    </dependency>
</dependencies>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Brixton.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>


非常easy,只需要引入eureka的依赖即可。


然后在入口类加入一个注解@EnableEurekaServer,即可将该项目作为服务注册中心:


package com.crossoverJie.service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {
    private final static Logger logger = LoggerFactory.getLogger(EurekaApplication.class);
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class, args);
        logger.info("SpringBoot Start Success");
    }
}


接着修改配置文件application.properties:


server.port=8888
# 不向注册中心注册自己
eureka.client.register-with-eureka=false
# 不需要检索服务
eureka.client.fetch-registry=false
eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/


配置一下端口以及注册中心的地址即可。


然后按照正常启动springBoot项目一样启动即可。


在地址栏输入http://localhost:8888看到一下界面:


springBoot04.jpg


当然现在在注册中心还看不到任何一个应用,下面需要将上文的sbc-user,sbc-order注册进来。


向注册中心注册服务提供者


只需要在application.properties配置文件中加上注册中心的配置:


eureka.client.serviceUrl.defaultZone=http://localhost:8888/eureka/


并在sbc-order的主类中加入@EnableDiscoveryClient注解即可完成注册服务。


启动注册中心以及应用,在注册中心看到一下界面则成功注册:


springBoot05.jpg


消费注册中心的服务


服务是注册上去了,自然是需要消费了,这里就简单模拟了在调用http://localhost:8080/user/getUser这个接口的时候getUser接口会去调用ordergetOrder服务。


这里会用到另一个依赖:


<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>


他可以帮我们做到客户端负载,具体使用如下:


  • 加入ribbon依赖。


  • 在主类中开启@LoadBalanced客户端负载。


  • 创建restTemplate类的实例


@Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }


  • 使用restTemplate调用远程服务:


@Autowired
    private RestTemplate restTemplate;
     @RequestMapping(value = "/getUser",method = RequestMethod.POST)
    public UserRes getUser(@RequestBody UserReq userReq){
        OrderNoReq req = new OrderNoReq() ;
        req.setReqNo("1213");
        //调用远程服务
        ResponseEntity<Object> res = restTemplate.postForEntity("http://sbc-order/order/getOrderNo", req, Object.class);
        logger.info("res="+JSON.toJSONString(res));
        logger.debug("入参="+ JSON.toJSONString(userReq));
        UserRes userRes = new UserRes() ;
        userRes.setUserId(123);
        userRes.setUserName("张三");
        userRes.setReqNo(userReq.getReqNo());
        userRes.setCode(StatusEnum.SUCCESS.getCode());
        userRes.setMessage("成功");
        return userRes ;
    }


由于我的远程接口是post,所以使用了postForEntity()方法,如果是get就换成getForEntity()即可。


注意这里是使用应用名sbc-order(配置于sbc-order的application.properties中)来进行调用的,并不是一个IP地址。


启动注册中心、两个应用。


PostMan调用getUser接口时控制台打印:


2017-06-27 00:18:04.534  INFO 63252 --- [nio-8080-exec-3] c.c.sbcuser.controller.UserController    : res={"body":{"code":"4000","message":"appID不能为空","reqNo":"1213"},"headers":{"X-Application-Context":["sbc-order:8181"],"Content-Type":["application/xml;charset=UTF-8"],"Transfer-Encoding":["chunked"],"Date":["Mon, 26 Jun 2017 16:18:04 GMT"]},"statusCode":"OK","statusCodeValue":200}


由于并没有传递appId所以order服务返回了一个错误,也正说明是远程调用到了该服务。


总结


ps:这里只是简单使用了ribbon来进行服务调用,但在实际的开发中还是比较少的使用这种方式来调用远程服务,而是使用Feign进行声明式调用,可以简化客户端代码,具体使用方式请持续关注。


本次算是springBoot+springCloud的入门,还有很多东西没有讲到,之后我将会根据实际使用的一些经验继续分享SpringCloud这个新兴框架。


项目地址:github.com/crossoverJi…

个人博客地址:crossoverjie.top


相关文章
|
2月前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
397 37
|
1月前
|
负载均衡 网络协议 Java
浅谈Springboot与Springcloud的区别
浅谈Springboot与Springcloud的区别
36 1
|
3月前
|
Java 微服务 Spring
SpringBoot+Vue+Spring Cloud Alibaba 实现大型电商系统【分布式微服务实现】
文章介绍了如何利用Spring Cloud Alibaba快速构建大型电商系统的分布式微服务,包括服务限流降级等主要功能的实现,并通过注解和配置简化了Spring Cloud应用的接入和搭建过程。
SpringBoot+Vue+Spring Cloud Alibaba 实现大型电商系统【分布式微服务实现】
|
3月前
|
Java
SpringBoot和SpringCloud对应版本
SpringBoot和SpringCloud对应版本
85 0
|
4月前
|
Java API 开发工具
Spring Boot与Spring Cloud Config的集成
Spring Boot与Spring Cloud Config的集成
|
4月前
|
消息中间件 负载均衡 Java
最容易学会的springboot gralde spring cloud 多模块微服务项目
最容易学会的springboot gralde spring cloud 多模块微服务项目
|
4月前
|
监控 NoSQL Java
通用快照方案问题之Martin Flower提出的微服务之间的通信如何解决
通用快照方案问题之Martin Flower提出的微服务之间的通信如何解决
42 0
|
1月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,包括版本兼容性、安全性、性能调优等方面。
137 1
|
16天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。首先,创建并配置 Spring Boot 项目,实现后端 API;然后,使用 Ant Design Pro Vue 创建前端项目,配置动态路由和菜单。通过具体案例,展示了如何快速搭建高效、易维护的项目框架。
94 62
|
14天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,帮助开发者提高开发效率和应用的可维护性。
32 2

热门文章

最新文章