欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

荐 小名的开源项目【EamonVenti】0.0篇 —— 学习如何搭建一个简单的SpringCloud架构,体验微服务的强大!

程序员文章站 2022-03-07 11:30:00
小名听说,公司的下一个项目会用到SpringCloud。小名非常开心????但是小名从来没有接触过,所以想着先体验一下微服务的强大!这篇文章是小名的SpringCloud启航篇0.0????本文仅涉及到SimpleStructure分支一 、 创建 父模块:1.创建一个maven项目(1)打开idea,File —> New project —>Maven(2)填写 项目名称、坐标(groupid和artifactId)(3) 选择Maven仓库地址2. 父项目创建完...
小名听说,公司的下一个项目会用到SpringCloud。小名非常开心????
但是小名从来没有接触过,所以想着先体验一下微服务的强大!
这篇文章是小名的SpringCloud启航篇0.0????

本文仅涉及到SimpleStructure分支

荐
                                                        小名的开源项目【EamonVenti】0.0篇 —— 学习如何搭建一个简单的SpringCloud架构,体验微服务的强大!

一 、 创建 父模块:

1.创建一个maven项目

(1)打开idea,File —> New project —>Maven

荐
                                                        小名的开源项目【EamonVenti】0.0篇 —— 学习如何搭建一个简单的SpringCloud架构,体验微服务的强大!

(2)填写 项目名称、坐标(groupid和artifactId)

荐
                                                        小名的开源项目【EamonVenti】0.0篇 —— 学习如何搭建一个简单的SpringCloud架构,体验微服务的强大!

(3) 选择Maven仓库地址

荐
                                                        小名的开源项目【EamonVenti】0.0篇 —— 学习如何搭建一个简单的SpringCloud架构,体验微服务的强大!

2. 父项目创建完成,以后的子项目都应该继承这个项目,在pom.xml文件添加依赖:
<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.Eamon</groupId>
  <artifactId>EamonVenti</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.RELEASE</version>
    </parent>

    <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>Finchley.RELEASE</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
    </dependencyManagement>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
3. 启动 父模块

(1)将war放到Tomcat

荐
                                                        小名的开源项目【EamonVenti】0.0篇 —— 学习如何搭建一个简单的SpringCloud架构,体验微服务的强大!

(2) 部署本地 war 到Tomcat:

荐
                                                        小名的开源项目【EamonVenti】0.0篇 —— 学习如何搭建一个简单的SpringCloud架构,体验微服务的强大!

(3)启动Tomcat

荐
                                                        小名的开源项目【EamonVenti】0.0篇 —— 学习如何搭建一个简单的SpringCloud架构,体验微服务的强大!

(4)验证:网址输入 http://localhost:8080/ 出现“Hello,World!”,启动成功!

二 、 创建 注册中心(Eureka服务)

1. 在父模块下,创建新模块作为注册中心

(1) 如下图,在EamonVenti上右键创建新模块

荐
                                                        小名的开源项目【EamonVenti】0.0篇 —— 学习如何搭建一个简单的SpringCloud架构,体验微服务的强大!

(2)选择 Spring Initializr

荐
                                                        小名的开源项目【EamonVenti】0.0篇 —— 学习如何搭建一个简单的SpringCloud架构,体验微服务的强大!

(3) 按下图操作:

荐
                                                        小名的开源项目【EamonVenti】0.0篇 —— 学习如何搭建一个简单的SpringCloud架构,体验微服务的强大!

(4)pom中修改或添加的注册中心的依赖

注意:子模块依赖父模块时,如下图一定要一 一对应:

荐
                                                        小名的开源项目【EamonVenti】0.0篇 —— 学习如何搭建一个简单的SpringCloud架构,体验微服务的强大!

除了上图以外,还要手动添加如下依赖:

<!--添加注册中心的依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
            <version>1.3.0.RELEASE</version>
        </dependency>

(5)创建配置文件application.yml

spring:
  application:
    name: eureka-server
  #开启权限认证
  security:
    basic:
      enabled: true
    user:
      name: root
      password: root

server:
  host: localhost
  port: 8081
eureka:
  client:
    #此项目不作为客户端注册
    register-with-eureka: false
    fetch-registry: false
    service-url:
      #开启权限验证后Eureka地址为 用户名:密码@地址:端口号,如未开启权限验证则直接使用 地址:端口号
      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@${server.host}:${server.port}/eureka


其中:

eureka:
  client:
    register-with-eureka: false
    fetch-registry: false

意义是,禁止 eureka server 自己注册自己

(6)启动项中添加注解 @EnableEurekaServer

@EnableEurekaServer//添加该注解,申明此处为服务注册中心
@SpringBootApplication
public class RegisterApplication {
 
    public static void main(String[] args) {
        SpringApplication.run(RegisterApplication.class, args);
    }
 
}

其中:
@SpringBootApplication注解是 : SpringBoot的一个组合注解,包含@Configuration、@EnableAutoConfiguration、@ComponentScan

PS:如果开启了权限验证并且SpringBoot版本为2.0以上的话还需要一个操作,因为2.0默认开启了csrf,如果我们现在直接启动Eureka服务的话客户端是注册不上的,所以需要把csrf关闭

在cn.org.zhixiang包下新建security包,新建WebSecurityConfigurer类

@EnableWebSecurity
public class WebSecurityConfigurer extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable();
        super.configure(http);
    }
}
2. 启动并验证 注册中心 是否可用 http://localhost:8081

荐
                                                        小名的开源项目【EamonVenti】0.0篇 —— 学习如何搭建一个简单的SpringCloud架构,体验微服务的强大!

3. 浏览器中出现如下界面,恭喜你,成功了!

荐
                                                        小名的开源项目【EamonVenti】0.0篇 —— 学习如何搭建一个简单的SpringCloud架构,体验微服务的强大!

三 、 创建 生产者

1. 在父模块下,创建新模块作为生产者

(1) 步骤跟创建注册中心一样,区别在命名:producer

荐
                                                        小名的开源项目【EamonVenti】0.0篇 —— 学习如何搭建一个简单的SpringCloud架构,体验微服务的强大!

(2) pom中添加依赖

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

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-eureka</artifactId>
    <version>1.4.4.RELEASE</version>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

(3) application.yml中配置相关信息

spring:
  application:
    name: produce
server:
  port: 8082

eurekaServer:
  host: localhost
  port: 8081
  user: root
  password: root

eureka:
  client:
    #将此项目注册到Eureka服务
    register-with-eureka: true
    service-url: http://${eurekaServer.user}:${eurekaServer.password}@${eurekaServer.host}:${eurekaServer.port}/eureka

(4) 启动项中 添加注解 @EnableEurekaClient,声明自己为生产者

@SpringBootApplication
@EnableEurekaClient//声明自己为生产者
public class ProduceApplication {

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

}

(5) 创建User实体类以及UserController,目录如下图:

荐
                                                        小名的开源项目【EamonVenti】0.0篇 —— 学习如何搭建一个简单的SpringCloud架构,体验微服务的强大!

User实体类:

public class User {
    private long id;
    private String name;
    private int age;
    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

UserController类:

@RestController
@RequestMapping("/user")
public class UserController {
    @GetMapping(value = "/getUser/{id}")
    public User getUser(@PathVariable Long id){
        User user=new User();
        user.setId(id);
        user.setName("小名");
        user.setAge(2);
        return user;
    }
    @GetMapping(value = "/getName")
    public String getName(){
        return "小名";
    }
}

注解解释:

  • @RestController注解:@ResponseBody + @Controller
  • @GetMapping:相当于@RequestMapping(value="", method = RequestMethod.GET)
  • @PathVariable:可以将URL中占位符参数{xxx}绑定到处理器类的方法形参中
2.启动 producer,并输入:

浏览器输入:http://localhost:8082/user/getUser/3

浏览器输入:http://localhost:8082/user/getName
返回:小名

3. 刷新 注册中心页面,可以看到 服务已经注册到注册中心

荐
                                                        小名的开源项目【EamonVenti】0.0篇 —— 学习如何搭建一个简单的SpringCloud架构,体验微服务的强大!

四 、 创建 消费者:

1. 在父模块下,创建新模块作为消费者

 
(1)前面的步骤同生产者
(2)在pom.xml中添加依赖

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
            <version>1.4.4.RELEASE</version>
        </dependency>

        <!--提供客户端的软件负载均衡-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-ribbon</artifactId>
            <version>1.4.2.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

(3)application.yml 中添加配置信息

spring:
  application:
    name: consumer
server:
  port: 8083

eurekaServer:
  host: localhost
  port: 8081
  user: root
  password: root

eureka:
  client:
    #将此项目注册到Eureka服务
    register-with-eureka: true
    service-url:
      defaultZone: http://${eurekaServer.user}:${eurekaServer.password}@${eurekaServer.host}:${eurekaServer.port}/eureka

(4)修改UserController:

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping(value = "/getUser/{id}")
    public User getUser(@PathVariable Long id){
        return restTemplate.getForObject("http://produce/user/getUser/"+id,User.class);
    }
    @GetMapping(value = "/getName")
    public String getName(){
        return "小名";
    }
}

(5)启动项中 添加注解 @EnableDiscoveryClient,声明自己为消费者

@SpringBootApplication
@EnableDiscoveryClient//声明自己为消费者
public class ConsumerApplication {

    @Bean
    @LoadBalanced//开启负载均衡
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

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

}

注解解释:

  • RestTemplate类:是一个对于HTTP请求封装的一个类,这个就是一个封装原生API访问一个URL的简化版本。

  • @Bean注解:等同于以前在xml中配置的如下代码

    <beans>
    <bean id="restTemplate" class="org.springframework.web.client.RestTemplate"/>
    </beans>
    
  • @LoadBalanced注解:开启Eureka的负载均衡

2. 右键启动“ConsumerApplication”

浏览器输入:http://localhost:8083/user/getUser/3
输出:{“id”:3,“name”:“小名”,“age”:2}

3. 刷新 注册中心页面,可以看到 服务已经注册到注册中心

荐
                                                        小名的开源项目【EamonVenti】0.0篇 —— 学习如何搭建一个简单的SpringCloud架构,体验微服务的强大!


Ending????~

本文仅涉及到SimpleStructure分支

后期小名随着陆续地学习,会重新搭建项目框架,本文只是 “品尝一下SpringCloud的味道~ ”现在可以肯定的是会用到公司选用的Nacos,其他的小名还在学习中。所以,敬请期待~????
 
此文仅涉及到仓库中的SimpleStructure分支,希望大家可以持续关注小名,支持一下小名,给我的文章点赞????、评论✍、收藏????;给我的代码仓库点一个小Star⭐,谢谢大家啦~♥♥♥

本文地址:https://blog.csdn.net/Tianc666/article/details/110739996