荐 小名的开源项目【EamonVenti】0.0篇 —— 学习如何搭建一个简单的SpringCloud架构,体验微服务的强大!
小名听说,公司的下一个项目会用到SpringCloud。小名非常开心????
但是小名从来没有接触过,所以想着先体验一下微服务的强大!
这篇文章是小名的SpringCloud启航篇0.0????
一 、 创建 父模块:
1.创建一个maven项目
(1)打开idea,File —> New project —>Maven
(2)填写 项目名称、坐标(groupid和artifactId)
(3) 选择Maven仓库地址
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
(2) 部署本地 war 到Tomcat:
(3)启动Tomcat
(4)验证:网址输入 http://localhost:8080/ 出现“Hello,World!”,启动成功!
二 、 创建 注册中心(Eureka服务)
1. 在父模块下,创建新模块作为注册中心
(1) 如下图,在EamonVenti上右键创建新模块
(2)选择 Spring Initializr
(3) 按下图操作:
(4)pom中修改或添加的注册中心的依赖
注意:子模块依赖父模块时,如下图一定要一 一对应:
除了上图以外,还要手动添加如下依赖:
<!--添加注册中心的依赖-->
<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
3. 浏览器中出现如下界面,恭喜你,成功了!
三 、 创建 生产者
1. 在父模块下,创建新模块作为生产者
(1) 步骤跟创建注册中心一样,区别在命名:producer
(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,目录如下图:
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. 刷新 注册中心页面,可以看到 服务已经注册到注册中心
四 、 创建 消费者:
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. 刷新 注册中心页面,可以看到 服务已经注册到注册中心
Ending????~
后期小名随着陆续地学习,会重新搭建项目框架,本文只是 “品尝一下SpringCloud的味道~ ”现在可以肯定的是会用到公司选用的Nacos,其他的小名还在学习中。所以,敬请期待~????
此文仅涉及到仓库中的SimpleStructure分支,希望大家可以持续关注小名,支持一下小名,给我的文章点赞????、评论✍、收藏????;给我的代码仓库点一个小Star⭐,谢谢大家啦~♥♥♥
本文地址:https://blog.csdn.net/Tianc666/article/details/110739996
上一篇: Java-异常、线程-第16节