10、Spring Boot分布式
1.分布式简介 
2.Zookeeper和Dubbo 
3.zookeeper
(1).zookeeper安装
官方文档:https://hub.docker.com/_/zookeeper?tab=description
在docker上安装zookeeper
[root@hosystem ~]# docker search zookeeper NAME DESCRIPTION STARS OFFICIAL AUTOMATED zookeeper Apache ZooKeeper is an open-source server wh… 947 [OK] [root@hosystem ~]# docker pull zookeeper:3.4.11 |
(2).zookeeper启动
[root@hosystem ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE zookeeper 3.4.11 56d414270ae3 2 years ago 146MB [root@hosystem ~]# docker run --name ZK01 -p 2181:2181 --restart always -d 56d414270ae3 054d27805228d7d3cc6f8df96962a2dd9c24f3f5907554160854c661ef8d67dd [root@hosystem ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 054d27805228 56d414270ae3 "/docker-entrypoint.…" 41 seconds ago Up 21 seconds 2888/tcp, 0.0.0.0:2181->2181/tcp, 3888/tcp ZK01 #将2181端口添加到防火墙 [root@hosystem ~]# firewall-cmd --permanent --zone=public --add-port=2181/tcp success [root@hosystem ~]# firewall-cmd --reload success |
(3).zookeeper整合dubbo
[1].创建项目
①.创建Empty Project
②.New Module
创建provider
创建consumer
4.Spring Boot和Spring Cloud
Martin Fowler 微服务原文 https://martinfowler.com/articles/microservices.html
(1).创建工程
[1].创建Empty Project
[2].创建eureka-server
[3].创建provider-ticket
[4].创建consumer-user
(2).配置eureka-server信息
[1].application.properties
server.port=8761 eureka.instance.hostname=eureka-server eureka.client.register-with-eureka=false eureka.client.fetch-registry=false eureka.client.service-url.defaultZone=http://localhost:8761/eureka/ |
[2].EurekaServerApplication.java
package com.hosystem.eurekaserver; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; /** * 注册中心 * 1.配置Eureka信息 * 2.@EnableEurekaServer */ @EnableEurekaServer @SpringBootApplication public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } } |
访问eureka页面
(3).配置provider-ticket信息
[1].8001
①.TicketController.java
package com.hosystem.providerticket.controller; import com.hosystem.providerticket.service.TicketService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class TicketController { @Autowired TicketService ticketService; @GetMapping("/ticket") public String getTicket(){ System.out.println("8001"); return ticketService.getTicket(); } } |
②.TicketService.java
package com.hosystem.providerticket.service; import org.springframework.stereotype.Service; @Service public class TicketService { public String getTicket(){ return "《模仿游戏》"; } } |
③.application.properties
server.port=8001 spring.application.name=provider-ticket #注册服务的时候使用服务的ip地址 eureka.instance.prefer-ip-address=true eureka.client.service-url.defaultZone=http://localhost:8761/eureka/ |
[2].8002
①.TicketController.java
package com.hosystem.providerticket.controller; import com.hosystem.providerticket.service.TicketService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class TicketController { @Autowired TicketService ticketService; @GetMapping("/ticket") public String getTicket(){ System.out.println("8002"); return ticketService.getTicket(); } } |
②.TicketService.java
package com.hosystem.providerticket.service; import org.springframework.stereotype.Service; @Service public class TicketService { public String getTicket(){ return "《模仿游戏》"; } } |
③.application.properties
server.port=8002 spring.application.name=provider-ticket #注册服务的时候使用服务的ip地址 eureka.instance.prefer-ip-address=true eureka.client.service-url.defaultZone=http://localhost:8761/eureka/ |
(4).provider-ticket
[1].package
打包provider-ticket两次,一个端口为8001一次端口为8002
[2].启动provider
(5).consumer-user
[1]application.properties
server.port=8200 spring.application.name=consumer-user #注册服务的时候使用服务的ip地址 eureka.instance.prefer-ip-address=true eureka.client.service-url.defaultZone=http://localhost:8761/eureka/ |
[2].ConsumerUserApplication.java
package com.hosystem.consumeruser; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; import org.springframework.web.client.RestTemplate; @EnableDiscoveryClient //开启发现功能 @SpringBootApplication public class ConsumerUserApplication { public static void main(String[] args) { SpringApplication.run(ConsumerUserApplication.class, args); } @LoadBalanced //使用负载均衡机制 @Bean public RestTemplate restTemplate(){ return new RestTemplate(); } } |
[3].UserController.java
package com.hosystem.consumeruser.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; @RestController public class UserController { @Autowired RestTemplate restTemplate; @GetMapping("/buy") public String buyTicket(String name){ String s = restTemplate.getForObject("http://PROVIDER-TICKET/ticket",String.class); return name+"观看了"+s; } } |
注意,观察加@LoadBalanced和不加@LoadBalanced的区别。加了@LoadBalanced的可以实现负载均衡。
参考文档:
https://github.com/alibaba/dubbo
https://hub.docker.com/_/zookeeper?tab=description
https://github.com/apache/dubbo/
https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient
https://martinfowler.com/articles/microservices.html
10、Spring Boot分布式的更多相关文章
- spring boot分布式技术,spring cloud,负载均衡,配置管理器
spring boot分布式的实现,使用spring cloud技术. 下边是我理解的spring cloud的核心技术: 1.配置服务器 2.注册发现服务器eureka(spring boot默认使 ...
- spring boot 分布式session实现
spring boot 分布式session实现 主要是通过包装HttpServletRequest将session相关的方法进行代理. 具体是的实现就是通过SessionRepositoryFilt ...
- 2020最新的Spring Boot 分布式锁的具体实现(内附代码)
前言 面试总是会被问到有没有用过分布式锁.redis 锁,大部分读者平时很少接触到,所以只能很无奈的回答 "没有".本文通过 Spring Boot 整合 redisson 来实现 ...
- spring boot 分布式事务实现(XA方式)
关于spring boot 支持分布式事务,XA是常用的一种方式. 这里把相关的配置记下,方便以后使用. 首先配置两个不同的数据源 : 订单库.持仓库. /** * Created by zhangj ...
- spring boot 分布式锁组件 spring-boot-klock-starter
基于redis的分布式锁spring-boot starter组件,使得项目拥有分布式锁能力变得异常简单,支持spring boot,和spirng mvc等spring相关项目 快速开始 sprin ...
- Spring Boot 分布式Session状态保存Redis
在使用spring boot做负载均衡的时候,多个app之间的session要保持一致,这样负载到不同的app时候,在一个app登录之后,而打到另外一台服务器的时候,session丢失. 常规的解决方 ...
- 【spring boot】10.spring boot下的单元测试
spring boot下的单元测试,思前想后还是需要单独用一章篇幅来看看. 然后在看了介绍和使用时候,我感觉并不想多去看了. 但是还是给后来人留下参考的路径: 官网说明:https://spring. ...
- (38)Spring Boot分布式Session状态保存Redis【从零开始学Spring Boot】
[本文章是否对你有用以及是否有好的建议,请留言] 在使用spring boot做负载均衡的时候,多个app之间的session要保持一致,这样负载到不同的app时候,在一个app登录之后,而访问到另外 ...
- 使用idea maven开发spring boot 分布式开发入门
1:使用idea创建一个maven工程 bos2 2:删除bos2的src 文件夹,向pom.xml文件 中添加版本号 <packaging>pom</packaging> & ...
随机推荐
- Sysbench测试神器:一条命令生成百万级测试数据
1. 基准测试 基准测试(benchmarking)是性能测试的一种类型,强调的是对一类测试对象的某些性能指标进行定量的.可复现.可对比的测试. 进一步来理解,基准测试是在某个时候通过基准测试建立一个 ...
- 最新主流 Markdown 编辑器推荐
Markdown ,2004年由 John Gruberis 设计和开发,是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式,以下将介绍目前比较流行的一 ...
- dubbo,hessian过滤器filter使用
Dubbo的Filter在使用的过程中是我们扩展最频繁的内容,而且Dubbo的很多特性实现也都离不开Filter的工作,今天一起来看一下Filter的具体实现. Filter(过滤器)在很多框架中都有 ...
- Redis学习笔记(七)——数据结构之有序集合(sorted set)
一.介绍 Redis有序集合和集合一样都是string类型元素的机会,且不允许重复的成员. 不同的是每个元素都会关联一个double类型的分数.Redis正是通过分数来为集合中的成员进行从小到放大的排 ...
- 对于类似经销商的实体中Place(CBM_PALCE_ID = NULL)的情况,如何获取省市信息(限foton)
在库里像上述描述的数据很多,这种情况需要拿fence里的经纬度,反查省市 String[] strArr = data.getFence().getValue().split(";" ...
- SpringMVC中ModelAndView的两个jar包引起的思考servlet和portlet
在使用ModelAndView时,需要去导包,但是有两个包. 检查前台form表单提交的也正确,后台这也没有问题. 后来发现竟然时导包导错误了. 到此,如果是因为到错包问题,应该就解决了. 但是,深入 ...
- 专题一:why redis ?
一.NoSQL 现在互联网应用其中有两个特点:(1)海量用户(2)不可避免地高并发.常常因为这样,我们网站或者服务器将面临崩溃的风险.而多用户.高并发只是现象,究其根源,罪魁祸首就是关系型数据库, ...
- Git Push大文件报错后如何撤回
昨晚在提交一个项目代码时,不小心把数据库备份文件也一起Commit了:到最后Push的时候报错了.最后弄了半天解决了,在此记录下. 如下图,文件有108M. 项目放在第三方托管平台上,根据提示查看了原 ...
- git clone克隆github仓库慢,问题解决
导读 转载自:https://www.hangge.com/blog/cache/detail_2670.html 原因 由于国内网络问题,当我们使用 git clone 命令从 github ...
- shell 之 -f -z -e -o -a -d
# -f 文件存在 if[ -f /etc/sysconfig/network ]; then ./etc/sysconfig/network fi # -z 字串为空/ -o or / -a and ...