说明

问题:SpringCloud有那么多组件,我们如何入门呢?


答:分布式程序,最基础的功能就是实现实例与实例直接的远程调用。又因为我们Springcloud实现远程调用需要依赖注册中心来实现负载均衡,所以我们要实现实例与实例直接的远程访问,先配置注册中心。 如图所示:

springclound项目 部署 ubuntu springcloud如何部署_User

前提:配置父项目

说明:先创建Maven聚合项目,再创建三个eureka,instance-service,instance-client三个模块。聚合项目的父项目的src可以删除掉。

– 父项目pom.xml


springclound项目 部署 ubuntu springcloud如何部署_Spring Cloud_02




–父项目大致结构图


springclound项目 部署 ubuntu springcloud如何部署_spring_03

第一部分:配置Eureka注册中心

第一步:创建SpringBoot项目加入依赖

--父项目选择模块


springclound项目 部署 ubuntu springcloud如何部署_ci_04


--选择Spring Initializr


springclound项目 部署 ubuntu springcloud如何部署_ci_05


--选择依赖


springclound项目 部署 ubuntu springcloud如何部署_ci_06


--对应的pom.xml依赖代码

<dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
 </dependency>

第二步:启动Eureka注解

@SpringBootApplication
@EnableEurekaServer //启动Eureka服务器
public class EurekaServerApplication {

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

第三步:配置Eureka服务信息

##服务器信息
server.port=5121

##指定Eureka服务信息
eureka.instance.hostname=localhost
##服务入口
eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka
#3.是否将自身注册为服务 false表示不注册
eureka.client.register-with-eureka=false
#4.是否主动发现服务  false表示不发现
eureka.client.fetch-registry=false

第四步:启动入口类,注册中心

启动后,浏览器键入http://localhost:5121


springclound项目 部署 ubuntu springcloud如何部署_Spring Cloud_07

第二部分:实现服务方实例

第一步:创建SpringBoot项目

--选择依赖


springclound项目 部署 ubuntu springcloud如何部署_ci_08


--POM.xml文件依赖情况如下:


<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

第二步:入口类加入启动Eureka客户端

@SpringBootApplication
@EnableEurekaClient //服务方需要声明是一个Eureka注册中心的客户端
public class InstanceServerApplication {

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

第三步:配置文件

--修改application.properties配置文件,必须包含实例名和注册中心的访问路径

##服务端口
server.port=8080
##必须要指定服务器,因为到时我们就可以该名称集群和让调用找到服务的
spring.application.name=InstanceServer
##指定注册中心的入口。要跟eureka模块的该键的值一一对应。
eureka.client.service-url.defaultZone=http://localhost:5121/eureka

第四步:编写POJO

@Data
public class User implements Serializable{
    private int id;
    private String username;
    private String password;
}

第五步:编写一个Controller

@RestController
public class UserController {

    /**
     * 用户注册
     * @param user
     * @return
     */
    @PostMapping(value = "/login")
	//注意:是使用JSON数据传递对象
	//客户端restTemplate是通过application/json格式发送对象数据的,所以需要加上@RequestBody
    public String login(@RequestBody User user){
        System.out.println("服务方"+user.getUsername());
        return "OK 8080服务方:"+user.getUsername();
    }
}

第六步:启动测试


springclound项目 部署 ubuntu springcloud如何部署_Spring Cloud_09

第三部分:实例调用方实例

第一步:创建SpringBoot项目

《通过复制服务方实例》修改就可以。依赖和服务方是一致的。


springclound项目 部署 ubuntu springcloud如何部署_spring_10

第二步:修改入口类

@SpringBootApplication
@EnableDiscoveryClient //启动调用方发现服务。等同于@EnableEurekaClient
public class InstanceClientApplication {

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

	//创建远程调用对象
    @Bean
    @LoadBalanced //支持负载均衡
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

第三步:配置文件

##服务端口
server.port=8081
##必须要指定服务器,因为到时我们就可以该名称集群和让调用找到服务的
spring.application.name=instance-client
##指定注册中心的入口:
eureka.client.service-url.defaultZone=http://localhost:5121/eureka

第四步:创建pojo类

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private int id;
    private String username;
    private String password;
}

第五步:创建一个Service类

@Service
public class UserService {

    @Autowired
    private RestTemplate restTemplate;

    public String login(User user){
		//远程调用服务方,注意调用URL使用的是服务方的应用名,而不是IP端口
		//注意:postForObject发送的user对象是json字符串的
        String result = restTemplate.postForObject("http://InstanceServer/login", user, String.class);
        System.out.println("8081 客户端::"+result);
        return result;
    }
}

第四步:修改Controller

--修改Controller调用Service远程访问

@RestController
public class UserController {

    @Autowired
    private UserService userService;

    @PostMapping(value = "/login")
    public String login(User user){
       return userService.login(user);
    }
}

第五步:使用Postman测试

启动调用方程序,然后使用postman工具测试结果 路径为:http://localhost:8081/login?username=zhangsan&password=123456

springclound项目 部署 ubuntu springcloud如何部署_ci_11