什么是微服务,分布式?

分布式:不同的模块部署在不同的服务器上,可以更好的解决网站高并发。

微服务:架构设计概念,各服务间隔离(分布式也是隔离),自治(分布式依赖整体组合)其它特性(单一职责,边界,异步通信,独立部署)是分布式概念的跟严格执行 SOA到微服务架构的演进过程。简单的说把项目拆分成各各模块,用注册中心的方式把服务都链接在一起

服务提供者与消费关系

服务提供者:提供服务被人调用

消费者:调用服务

Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。

Eureka包含两个组件:Eureka Server和Eureka Client。

Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。

Eureka Client是一个java客户端,用于简化与Eureka Server的交互,客户端同时也就是一个内置的、使用轮询(round-robin)负载算法的负载均衡器。

环境搭建:

本次环境用Gradle+IDEA

1.先搭建注册中心

主项目Gradle

group 'com.wang'
version = '0.0.1-SNAPSHOT'

apply plugin: 'java'

sourceCompatibility = 1.8

buildscript {
ext {//定义一个变量,统一规定springboot的版本
springBootVersion = '1.5.10.RELEASE'
}
repositories {
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
jcenter()
mavenCentral()
//Spring repo
maven { url "http://repo.spring.io/snapshot" }
maven { url "http://repo.spring.io/milestone" }
maven { url "http://repo.spring.io/release" }
maven { url 'http://repo.spring.io/plugins-snapshot' }
}

dependencies {//用来打包
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
//设定当前所有的项目的配置
allprojects {
group 'com.ssx'
version = '0.0.1-SNAPSHOT'

ext {
springCloudVersion = 'Edgware.SR2'
}

repositories {
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
jcenter()
mavenCentral()
//Spring repo
maven { url "http://repo.spring.io/snapshot" }
maven { url "http://repo.spring.io/milestone" }
maven { url "http://repo.spring.io/release" }
maven { url 'http://repo.spring.io/plugins-snapshot' }
}
}
//设定当前模块项目中的配置
subprojects {
apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'spring-boot'

dependencies {
//使用springboot-web组件,但是排除tomcat组件
compile('org.springframework.boot:spring-boot-starter-web') {
exclude module: "spring-boot-starter-tomcat"
}
//使用undertow作为应用服务,作为servlet容器
compile 'org.springframework.boot:spring-boot-starter-undertow'
//使用健康检查组件
compile 'org.springframework.boot:spring-boot-starter-actuator'
testCompile(
group: 'junit', name: 'junit', version: '4.12'
)
}

dependencyManagement {
imports {
//加上此配置后,如果需要引用springcloud的组件,就不需要再提供版本信息
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}
}
 

添加注册中心的依赖

dependencies{
implementation 'org.springframework.cloud:spring-cloud-starter-eureka-server'
}
 

注册中心启动类

@SpringBootApplication
@EnableEurekaServer //表示这个项目为eureka的注册中心
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class,args);
}
}
 

注册中心Yaml文件

server:
port:
spring:
application:
name: register-center
eureka:
client:
register-with-eureka: false #启动时不注册
fetch-registry: false #不向注册中心拉去数据
server:
enable-self-preservation: false #关闭自我保护
 

启动注册中心,端口号为8085

这个为Eureka的信息页面 可以看到这个时候 Instances currently registered with Eureka里面是No instances available 也就是这个时候还没有服务注册进来,下面我们写注册方,也就是客户端

客户端的启动类

@SpringBootApplication
@EnableEurekaClient //它是eureka客户端也就是服务
public class ShoppingMallApplication { public static void main(String[] args) {
SpringApplication.run(ShoppingMallApplication.class,args);
}
}
 

客户端的yaml

server:
port:
spring:
application:
name: shopping-mall
eureka:
client:
service-url:
defaultZone: http://localhost:8085/eureka/
 

此时也要添加子项目的依赖

另外必须是指定注册中心的端口号,往里面注册服务

重新访问刷新注册中心就可以看到一个服务注入进来,solr服务类照葫芦画瓢

这个就是实现了 注册也发现,那我们紧接这 如何实现服务与服务之间调用呢?我现在想project-shopping-mall模块的controller调用solr的controller如何实现呢?

@SpringBootApplication
@EnableEurekaClient //它是eureka客户端也就是服务
public class ShoppingMallApplication {
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
RestTemplate template=new RestTemplate();
return template;
//表示网络请求
}
public static void main(String[] args) {
SpringApplication.run(ShoppingMallApplication.class,args);
}
} @Controller
public class ShopController {
@Autowired
RestTemplate restTemplate;
@RequestMapping("/toIndex")
public String toIndex(Model model){
String msg=restTemplate.getForEntity("http://SOLR/solrSear",String.class).getBody();
model.addAttribute("msg",msg);
return "index";
}
}
 

这个为调用solr的controller根据名字调用

@RestController
public class SolrController {
@RequestMapping("/solrSear")
public String solrSear(){
return "从solr查询到数据";
}
}

意思就是说 我在shop里调用solr的controller他会返回一个从solr查询到数据

这里还需要添加一个依赖

dependencies{
implementation 'org.springframework.cloud:spring-cloud-starter-eureka-server'
// https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-thymeleaf
compile group: 'org.springframework.boot', name: 'spring-boot-starter-thymeleaf'

}
 

shop模块里有thymeleaf模板展示数据,这个是我们的index页面

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<title>Title</title>
</head>
<body>
<h1>欢迎进入商场</h1>
<span th:text="${msg}"></span>
</body>
</html>

访问页面成功

可以看到我们成功拿到了数据

到这里我们已经实现服务的注册与发现,有问题请及时评论。

SpringCloud-Eureka注册中心的更多相关文章

  1. SpringCloud Eureka(注册中心集群)

    多个注册中心,其实用不同的配置对应 不同的端口号注册就行了. 注册中心自己也是个服务,看看之前的单个注册中心是怎么样的呢? server: port: 8888 # 服务端口eureka: insta ...

  2. springcloud eureka注册中心分布式配置

    最近在学习springcloud,做下笔记以及记下遇到的坑. 1.建立maven工程,结构很简单,一个启动类和一个配置文件,结构如下图所示 2.启动类代码如下,需要添加注册中心注解:EnableEur ...

  3. springcloud eureka注册中心 高可复用。

    1:新建两个注册中心项目(名称都为:spring-cloud-eureka,只是端口分别为8000.8001 ).两个注册中心相互注册对方. 2:两个注册中心都启动后,则对方服务列表都有对方的服务. ...

  4. springcloud eureka注册中心搭建

    环境描述 ① jdk1.8 ② idea ③ springcloud版本 Finchley.SR2 ④ maven3.0+ 导入jar包 <properties> <project. ...

  5. springCloud系列教程01:Eureka 注册中心集群搭建

    springCloud系列教程包含如下内容: springCloud系列教程01:Eureka 注册中心集群搭建 springCloud系列教程02:ConfigServer 配置中心server搭建 ...

  6. SpringCloud(一)Eureka注册中心

    Eureka简介 Eureka作为注册中心,管理各种服务功能包括服务的注册.发现.熔断.负载.降级等 Eureka注册中心实例 Eureka Server 1.pom文件配置SpringBoot.Sp ...

  7. SpringCloud实战之初级入门(一)— eureka注册中心

    目录 写在前面 1.资料目录 2.环境介绍 3.eureka注册中心 3.1 创建工程 3.2 启动工程 5.eureka注册中心集群高可用 6.结语 7.一点点重要的事情 写在前面 我在软件行业浸泡 ...

  8. SpringCloud学习笔记(1):Eureka注册中心

    简介 Eureka是Netflix开源的基于rest的服务治理方案,分为Server端和Client端,Server端为注册中心,其他微服务通过Client端连接Server端进行服务的注册和发现. ...

  9. SpringCloud的入门学习之深入理解Eureka注册中心

    1.Eureka 注册中心三种角色. 答:a.Eureka Server,注册中心,通过 Register.Get.Renew 等接口提供服务的注册和发现. b.Application Service ...

  10. SpringCloud学习心得—1.2—Eureka注册中心的密码认证、高可用的设置

      SpringCloud学习心得—1.2—Eureka注册中心的密码认证.高可用的设置 这是相关代码 链接 Eureka开启密码配置 添加依赖 <dependency> <grou ...

随机推荐

  1. React框架搭建单页面应用package.json基本包和依赖包

    { //依赖包 "devDependencies": { //babel "babel-core": "6.24.1", "bab ...

  2. RestTemplate进行表单请求,注意要使用MultiValueMap

    在对接API的时候,有时候文档中会说,表单提交,这时候就需要用到 MultiValueMap来操作,下面给大家展示一个简单的demo. MultiValueMap<Object, Object& ...

  3. Spring容器的理解

    控制反转(IOC,Inversion Of Contorl)和依赖注入(DI,Dependency Injection) IOC是一个宽泛的概念:对某事物的控制权由A转移到B. DI是实现IOC的一种 ...

  4. **没有规则可以创建“XXX”需要的目标“XXX”问题的解决方案

    一.现象 我将之前Redhat9.0编译好的uboot,转到ubuntu12.04环境.在ubuntu环境下对 uboot重新编译提示错误.编译过程如下: root@hailin-virtual-ma ...

  5. html块级元素和行级元素的区别和使用

    行内.块状元素区别: 1.行内元素与块级函数可以相互转换,通过修改display属性值来切换块级元素和行内元素,行内元素display:inline,块级元素display:block. 2.行内元素 ...

  6. python--内置函数03

    一 . 正则表达式 匹配字符串 元字符 . 除了换行 \w 数字, 字母, 下划线 \d 数字 \s 空白符 \n \t \b 单词的边界 \W 非xxx \D \S [ ] 字符组 or的关系 [^ ...

  7. Hibernate框架的主键生成策略

    在Hibernate中,id元素的<generator>子元素用于生成持久化类的对象的唯一标识符,也就是主键.Hibernate框架中定义了许多主键生成策略类,也叫生成器类.所有的生成器类 ...

  8. [工具使用] visualvm 通过jmx不能连接

    远程服务器,通常配置下jmx,然后用visualvm连接然后监控. 但昨天自己的一台测试服务器上,正确配置了jmx还是不能连接上去. 后来参考了 https://bjddd192.github.io/ ...

  9. Wordpress无法上传图片

    当在自己新搭建的个人网站添加文章的时候,我遇到了wordpress最普遍的第一个问题——无法上传图片.     每次图片上传完成之后跳出如上图无法建立目录的警告,根据提示首先确定是否有修改文件的权限通 ...

  10. xtu数据结构 D. Necklace

    D. Necklace Time Limit: 5000ms Memory Limit: 32768KB 64-bit integer IO format: %I64d      Java class ...