简陋的spring cloud搭建并部署云服务器

目录

1.创建父项目

2.创建本地Eureka注册中心模块

1.Eureka-server

2.Eureka-client(HelloWorld)

3.总结

3.添加包含业务的eureka子模块

4.将eureka部署到云服务器

5.新建服务提供者和消费者

6.将新建模块部署到云服务器


1.创建父项目

新建一个maven项目,命名为springcloud_demo。

修改pom文件,如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
 
    <groupId>com.xmy</groupId>
    <artifactId>Springcloud_Demo</artifactId>
    <version>1.0-SNAPSHOT</version>
 
    <!-- 1 确定spring boot的版本-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
    </parent>
    <!--2  确定版本-->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</java.version>
        <spring-cloud-release.version>Greenwich.RELEASE</spring-cloud-release.version>
    </properties>
 
    <!-- 3 锁定sprig cloud版本-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud-release.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <!-- 4 确定spring cloud私有仓库-->
    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
</project>

2.创建本地Eureka注册中心模块

1.Eureka-server

右键点击父项目,选择new-module

点击next,设置Eureka子模块名称,子模块路径,点击finish完成子模块创建

修改 Eureka子模块的pom文件:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>Springcloud_Demo</artifactId>
        <groupId>com.xmy</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
 
    <artifactId>Eureka_Demo</artifactId>
 
    <dependencies>
        <!--web起步依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- Eureka服务端 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>
    </dependencies>
 
</project>

创建核心配置文件application.yml

#服务注册中心端口号
server:
  port: 9099
 
# Spring
spring:
  application:
    # 应用名称
    name: eureka-server
eureka:
  instance:
    #服务注册中心实例的主机名
    hostname: localhost
  client:
    sevice-url:
      #服务注册中心的配置内容,指定服务注册中心的位置
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka
 
    #是否向服务注册中心注册自己
    register-with-eureka: false
    #是否检索服务
    fetch-registry: false

创建Application启动类:

package com.eureka;
 
 
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
 
@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class,args);
    }
}

将EurekaApplication启动类配置到Configurations中:

点击IDEA右上角的Add Configurations按钮,点击左上角的加号按钮后点击Spring Boot选项进入设置页面,设置启动名称以及启动类文件收点击OK按钮完成设置。

运行模块,浏览器输入http://localhost:9099访问Eureka注册中心

2.Eureka-client(HelloWorld)

与server使用同样的方法:

新建子项目-->修改pom.xml,增加依赖-->修改properties.yml文件-->创建Application启动类,配置到configuration-->运行项目

<!-- Eureka客户端 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>
server:
  port: 8700 # 服务提供方,访问应用的端口
 
#当前服务名称
spring:
  application:
    name: eureka-client
# 指定当前eureka客户端的注册地址,写服务端的信息
eureka:
  instance:
    hostname: localhost
  client:
    service-url:
      defaultZone: http://localhost:9099/eureka
    register-with-eureka: true
    fetch-registry: false
 
 
 

注意,在eureka client的yml配置文件中,service-url: defaultZone写注册中心的地址和端口,而server:port写本服务的端口。另外,register-with-eureka设置为 true,表示需要在eureka中注册自己。

同时运行eureka server和eureka client,访问9099(eureka server端口),8700(eureka client端口),结果如下,说明配置成功。(注册不上时多重启几遍)

3.总结

子项目与新建spring boot项目类似,只是需要在pom文件添加eureka的依赖,并在yml文件配置注册信息。

3.添加包含业务的eureka子模块

有一个写好的spring boot demo项目,将其迁移到本项目中。

首先新建子模块,选择spring initializr,填写项目信息。

选依赖,加了一个lombok,发现这里有eureka discovery client,那就直接添加。

注:

使用DiscoveryClient可以发现注册中心上的服务,注册中心可以是Eureka,也可以是Zookeeper等,因为不使用原始Netflix EurekaClient,所以在某种包装器后面的DiscoveryClient更易于使用。它也能提供通过服务名称查询对应的所有服务实例等功能。

而eureka client通过Spring自动注入的EurekaClient,不仅能发现服务实例,还能查看客户端连接等各种配置。

 新建完成,开始转移代码。按照pom、properties、Java的顺序进行。注意properties.yml文件要改写为application.properties。

先单独运行该子项目,运行成功。

重启eureka注册中心,查看是否在eureka注册成功 。可以看到两个服务都已注册成功并上线。

 

4.将eureka部署到云服务

 用的是腾讯云服务器。步骤见参考文章第五篇。

server面板地址
http://云服务器ip:8080/Eureka-Server/
 
client服务地址
http://云服务器ip:8080/Eureka-Client/HelloWorld
 

问题:

1,eurekaserver和client都可以单独访问和运行。但reureka client服务没有在注册中心注册成功。

2,实际访问使用的是tomcat的8080端口,而不是自定义的服务端口。(即使修改tomcat配置,也是跟8080一样,后缀webapps中的文件夹名访问。如果配置多个tomcat节点,两个项目都无法访问。)

解决办法:

1,client的defaultZone注册中心地址实际上为server面板地址加后缀/eureka,即云服务器ip:8080/Eureka-Server/eureka

2,尚未解决。甚至问题增加了:为什么自定义的端口号都没用了。

5.新建服务提供者和消费者

将会新建两个服务模块,互相都为服务的提供者和消费者。

新建子模块,命名为client1。可以在创建时就加入eureka client依赖,也可以手动在pom加。

然后在application的main方法类上添加@EnableEurekaClient注解。

再在application.properties配置文件添加Eureka服务提供者的配置。

这些步骤都是前面重复过的。

新建两个类ClientController 和CustomerController分别实现服务提供者和服务消费者的功能:

//服务提供者
@RestController
public class ClientController {
    @GetMapping("/client1")
    public Object index(){
        String str = "这是client1提供的服务";
        return new String(str);
    }
}
//服务消费者
@RestController
public class CustomerController {
    @Autowired
    private RestTemplate restTemplate;
    @GetMapping("/get2")
    public Object getIndex(){
        //http://client2/service2:client2是调用服务者的注册服务名称
        return restTemplate.getForObject("http://client2/service2",String.class,"");
    }
}

另外还有一个配置类:

//RestTemplate  配置
@Configuration
public class Config {
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(RestTemplateBuilder builder) {
        return builder.build();
    }
}

最后运行项目,检查注册结果:

 

 client2的新建过程类似,它也会调用client1提供的服务。

6.将新建模块部署到云服务器

跟第四步一样。详细步骤见参考文章第五篇。

新建模块打包报错Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0。修改maven-resources-plugin的版本:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
 
        <!--在这里修改版本-->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>2.4.3</version>
        </plugin>
        <!---->
 
    </plugins>
</build>

因为重新装了tomcat,中途遇到报错Error creating bean with name 'defaultValidator' defined in class path resource。卸载tomcat 7,装tomcat 8就可以了。

http://公网ip:8080/Eureka-Server/
 
http://公网ip:8080/Eureka-Client/HelloWorld
 
http://公网ip:8080/client1/service1
 
http://公网ip:8080/client2/service2
 
//报500
http://公网ip:8080/client1/get2

部署结果:

但是由于前面共用8080端口号的原因,服务调用时去查找自定义的8081和8082端口是找不到的。 

这个问题待解决。

7.LoadBalancer应用学习

这里参考:

Getting Started | Client-Side Load-Balancing with Spring Cloud LoadBalancer

SpringCloud LoadBalancer初体验_祈晴小义的博客-CSDN博客_spring-cloud-loadbalancer

SpringCloud使用Loadbalancer实现客户端负载均衡 - 百里浅暮 - 博客园 

1.首先新建子项目Loadbalancer,选择Cloud Loadbalancer 和 Spring Reactive Web依赖。

2.在LoadbalancerApplication主程序中提供“say hello”的服务。在greeting路径下随机返回三句话之一;在空路径下返回“中秋快乐!”

@RestController
@SpringBootApplication
public class LoadbalancerApplication {
 
    private static Logger log = LoggerFactory.getLogger(LoadbalancerApplication.class);
 
    public static void main(String[] args) {
        SpringApplication.run(LoadbalancerApplication.class, args);
    }
 
    @GetMapping("/greeting")
    public String greet() {
        log.info("Access /greeting");
 
        List<String> greetings = Arrays.asList("世界上有四种辣:微辣、中辣、", "重辣、", "还有,马上就要放假辣!");
        Random rand = new Random();
 
        int randomNum = rand.nextInt(greetings.size());
        return greetings.get(randomNum);
    }
 
    @GetMapping("/")
    public String home() {
        log.info("Access /");
        return "中秋快乐!";
    }
 
}

3.在resource文件夹配置文件中进行端口配置(yml或者.properties)

spring.application.name=say-hello
 
server.port=8085

4.新建项目Loadbalancer-user。使用LoadbalancerUserApplication来访问服务

@SpringBootApplication
@RestController
public class UserApplication {
 
    private final WebClient.Builder loadBalancedWebClientBuilder;
    private final ReactorLoadBalancerExchangeFilterFunction lbFunction;
 
    public UserApplication(WebClient.Builder webClientBuilder,
                           ReactorLoadBalancerExchangeFilterFunction lbFunction) {
        this.loadBalancedWebClientBuilder = webClientBuilder;
        this.lbFunction = lbFunction;
    }
 
    public static void main(String[] args) {
        SpringApplication.run(UserApplication.class, args);
    }
 
    @RequestMapping("/hi")
    public Mono<String> hi(@RequestParam(value = "name", defaultValue = "Mary") String name) {
        return loadBalancedWebClientBuilder.build().get().uri("http://say-hello/greeting")
                .retrieve().bodyToMono(String.class)
                .map(greeting -> String.format("%s, %s!", greeting, name));
    }
 
    @RequestMapping("/hello")
    public Mono<String> hello(@RequestParam(value = "name", defaultValue = "John") String name) {
        return WebClient.builder()
                .filter(lbFunction)
                .build().get().uri("http://say-hello/greeting")
                .retrieve().bodyToMono(String.class)
                .map(greeting -> String.format("%s, %s!", greeting, name));
    }
}

5.为WebClient.Builder实例编写配置类。

该配置提供了一个@LoadBalanced WebClient.Builder实例,当有人点击UserApplication.java的hi端点时,我们会使用它。一旦点击了hi端点,我们就使用这个构建器来创建一个WebClient实例,它向Say Hello服务的URL发出一个HTTP GET请求,并将结果作为一个字符串提供给我们。

但是对于hello端点,没有使用@LoadBalanced注释,而是使用@Autowired负载平衡器交换过滤函数(lbFunction ),通过使用filter()方法将它传递给我们以编程方式构建的WebClient实例。

参考文章:

spring cloud搭建教程_CSDN砖家的博客-CSDN博客_springcloud搭建

搭建SpringCloud项目_@lehao的博客-CSDN博客_springcloud项目搭建

Spring Cloud Netflix

Spring Cloud Eureka详解_大道化简的博客-CSDN博客_eureka

https://www.jianshu.com/p/ba1dbbfa1c81

https://www.jianshu.com/p/78e8797ea804

springboot打包错误:Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0..._åå的博客-CSDN博客

SpringCloud使用Loadbalancer实现客户端负载均衡 - 百里浅暮 - 博客园 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
天猫商城是一个基于SSM框架的综合性B2C电商平台,需求设计主要参考天猫商城的购物流程:用户从注册开始,到完成登录,浏览商品,加入购物车,进行下单,确认收货,评价等一系列操作。 作为模拟天猫商城系统的核心组成部分之一,采用SSM框架的天猫数据管理后台包含商品管理,订单管理,类别管理,用户管理和交易额统计等模块,实现了对整个商城的一站式管理和维护。本课程是一门专业的Java微服架构开发实战课程,主要讲解了当下流行的SpringBoot框架、SpringCloud架构以及与第三方技术整合开发实战内容。通过本课程的学习,能够理解并掌握SpringBoot的基础知识,同时能够掌握SpringBoot与常用的第三方技术整合实现实际开发中的业务需求,包括实现Web开发、数据访问、缓存管理、安全管理、消息服务、任务管理等;了解并掌握SpringCloud微服务架构的基础知识及相关组件的应用,掌握微服务架构在企业级开发的实践,建立起微服架构思想。项目技术栈:采用SpringBoot简化商城系统的初始搭建以及开发过程采用SpringMVC+Spring+IBatis完成项目的整合采用Mysql作为数据库存储,Druid配置数据库连接池采用SpringCloud+Netflix 微服务技术栈的实战开发使用Redis完成缓存的数据存储,搭建Redis搭建主从、哨兵、集群应用,保证Redis的高可用使用ElasticSearch全文检索系统进行商品数据搜索,使用ElasticSearch搭建搜索服务的高可用使用Ngnix实现页面动静分离与负载均衡的配置采用FastDFS文件储存系统文件存储,完成广告图片、商品图片的上传和存储系统使用采用CAS+shiro单点登录系统实现用户认证使用ECharts根据后台查询数据生成图表使用POI实现了商城盈利状况的Excel表格导出。商品的详情页使用Thymeleaf完成页面静态化,减少页面数据展示延迟项目中使用SpringBoot下的Aop + 自定义注解完成用户行为记录,日志采集后台管理系统使用Shiro实现登录验证和权限管理(超级管理员、管理员、产品编辑员)项目整合微信完成订单的支付使用Redission完成分布式锁,生成订单的编号使用SpringCloud Alibaba Seat完成下订单模块的分布式事务(新增订单表,库存减少,库存超卖设计)使用RabbitMQ 做消息队列,完成订单未支付自动取消和模块直接的解耦合使用Quartz任务调度,完成缓存的定时刷新,保证缓存的一致性使用本地消息表机制完成消息然队列RabbitMQ消息可靠性传输订单支付模块使用微信扫码支付,并设置订单超时自动取消通过Jquery实现前端校验,通过基于Hibernate的Valida注解实现后端的校验功能使用Base64编码对Json数据传输进行编码和解码项目使用RESTful设计风格实现资源的访问,实现前后端分离项目使用聚合数据第三方短信平台完成用户的登陆功能项目使用SpringBoot整合JavaMail完成邮件的发送项目使用SpringBoot整合Swagger2生成接口文档使用PostMan完成接口的测试项目的测试:SpringTest、dbunit、EasyMock使用Docker 进行应用的自动化打包和发布、自动化测试和持续集成、部署和调整其他应用使用 PowerDesigner,完成数据库的建模项目使用禅道进行BUG管理环境采用Maven实施多模块项目构建,采用Git进行项目版本管理 架构解读:  项目部分截图:              讲义部分截图:          
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值