什么是微服务,分布式?

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

微服务:架构设计概念,各服务间隔离(分布式也是隔离),自治(分布式依赖整体组合)其它特性(单一职责,边界,异步通信,独立部署)是分布式概念的跟严格执行 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. AOP日志组件 多次获取post参数

    AOP日志组件 多次获取post参数 需求:新增接口日志组件.通过拦截器对接口URL进行拦截处理,然后将接口post请求的参数与结果,写入日志表. 问题:POST方法的参数是存储在request.ge ...

  2. HTML5基础知识习题 一

    1. HTML5 之前的 HTML 版本是什么? 答: HTML 4.01 2. HTML5 的正确 doctype 是? 答: <!DOCTYPE html> 3. 在 HTML5 中, ...

  3. swift-通知的基本使用

    swift-通知的基本使用   //通知的使用 1.发通知.(以这条通知为例,通知名字:nickNameNotification 通知参数:title) NSNotificationCenter.de ...

  4. (23)zabbix单位符号Unit symbols

    概述 在zabbix里面,我们不需要使用大数字来,例如我们可以不使用86400来表示一天,这个数字又不容易理解也容易出错.用什么办法来解决大数字问题呢?我们可以使用单位来简化,例如简化zabbix触发 ...

  5. 【Gradle】Downloading https://services.gradle.org/distributions/gradle-3.3-bin.zip 失败

    提示连接超时 Downloading https://services.gradle.org/distributions/gradle-3.3-bin.zip 失败 这时候需要单独去官网下载包,然后放 ...

  6. Mac单机模式安装启动Kafka

    1.下载kafka,网址: https://www.apache.org/dyn/closer.cgi?path=/kafka/2.0.0/kafka_2.12-2.0.0.tgz 2.移动tar包到 ...

  7. python 有4个数字1234,能组成多少个互不相同且无重复的三位数数字。

    def output(): count = 0 for i in range(1,5): for j in range(1, 5): for k in range(1, 5): if i==j or ...

  8. xtu数据结构 B. Get Many Persimmon Trees

    B. Get Many Persimmon Trees Time Limit: 1000ms Memory Limit: 30000KB 64-bit integer IO format: %lld  ...

  9. excel设置单元格为文本

    可以使用分裂功能,解决单元格无法设置成文本的问题.

  10. HDU-1532 Drainage Ditches,人生第一道网络流!

    Drainage Ditches 自己拉的专题里面没有这题,网上找博客学习网络流的时候看到闯亮学长的博客然后看到这个网络流入门题!随手一敲WA了几发看讨论区才发现坑点! 本题采用的是Edmonds-K ...