.创建注册中心Eureka

  1. package com.dan.eurekaserver;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
  5. @EnableEurekaServer
  6. @SpringBootApplication
  7. public class EurekaServerApplication {
  8. public static void main(String[] args) {
  9. SpringApplication.run(EurekaServerApplication.class, args);
  10. }
  11. }
  12.  
  13. *Application.properties:*
  14.  
  15. server.port=8761
  16. eureka.instance.prefer-ip-address=true
  17. eureka.client.register-with-eureka=false
  18. eureka.client.fetch-registry=false
  19.  
  20. #注册地址
  21. eureka.client.serviceUrl.defaultZone=http://eureka:8761/eureka/

2.创建服务提供者 provider

  1. ProviderApplication :
  2.  
  3. package com.hzcf;
  4. import org.mybatis.spring.annotation.MapperScan;
  5. import org.springframework.boot.SpringApplication;
  6. import org.springframework.boot.autoconfigure.SpringBootApplication;
  7. import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
  8. @SpringBootApplication
  9. @EnableEurekaClient
  10. @MapperScan("com.hzcf.mapper")//扫描:该包下相应的class,主要是MyBatis的持久化类.
  11. public class ProviderApplication {
  12. public static void main(String[] args) {
  13. SpringApplication.run(ProviderApplication.class, args);
  14. }
  15. }
  16.  
  17. Controller:
  18. package com.hzcf.controller;
  19. import org.springframework.beans.factory.annotation.Autowired;
  20. import org.springframework.web.bind.annotation.GetMapping;
  21. import org.springframework.web.bind.annotation.PathVariable;
  22. import org.springframework.web.bind.annotation.ResponseBody;
  23. import org.springframework.web.bind.annotation.RestController;
  24. import com.hzcf.model.User;
  25. import com.hzcf.service.UserService;
  26.  
  27. @RestController
  28. public class UserController {
  29. @Autowired
  30. private UserService demoService;
  31. @GetMapping("/findById/{id}")
  32. @ResponseBody
  33. public User findById(@PathVariable Long id){
  34. User user = demoService.findOne(id);
  35. return user;
  36. }
  37. }
  38.  
  39. Service:
  40. package com.hzcf.service;
  41.  
  42. import org.springframework.beans.factory.annotation.Autowired;
  43. import org.springframework.stereotype.Service;
  44.  
  45. import com.hzcf.mapper.UserMapper;
  46. import com.hzcf.model.User;
  47.  
  48. @Service
  49. public class UserService {
  50.  
  51. @Autowired
  52. private UserMapper userMapper;
  53.  
  54. public User findOne(Long id) {
  55. return userMapper.findOne(id);
  56. }
  57. }
  58. Mapper:
  59. package com.hzcf.mapper;
  60. import com.hzcf.model.User;
  61. public interface UserMapper {
  62. public User findOne(Long id);
  63. }
  64.  
  65. <?xml version="1.0" encoding="UTF-8" ?>
  66. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
  67. <mapper namespace="com.hzcf.mapper.UserMapper" >
  68. <resultMap id="BaseResultMap" type="com.hzcf.model.User" >
  69. <id column="id" property="id" jdbcType="BIGINT" />
  70. <result column="name" property="name" jdbcType="VARCHAR" />
  71. <result column="password" property="password" jdbcType="VARCHAR" />
  72. </resultMap>
  73. <select id="findOne" parameterType="long" resultMap="BaseResultMap">
  74. select * from user where id = #{id}
  75. </select>
  76. </mapper>
  77.  
  78. Model:
  79. package com.hzcf.model;
  80.  
  81. public class User {
  82.  
  83. private long id;
  84.  
  85. private String name;
  86.  
  87. private String password;
  88.  
  89. public long getId() {
  90. return id;
  91. }
  92. public void setId(long id) {
  93. this.id = id;
  94. }
  95. public String getName() {
  96. return name;
  97. }
  98. public void setName(String name) {
  99. this.name = name;
  100. }
  101. public String getPassword() {
  102. return password;
  103. }
  104. public void setPassword(String password) {
  105. this.password = password;
  106. }
  107.  
  108. }
  109.  
  110. Application.properties
  111.  
  112. #端口
  113. server.port=9999
  114. ###datasource
  115. ########################################################
  116. spring.datasource.url = jdbc:mysql://47.94.11.55:3306/test
  117. spring.datasource.username = root
  118. spring.datasource.password = 824824
  119. spring.datasource.driverClassName = com.mysql.jdbc.Driver
  120. spring.datasource.max-active=20
  121. spring.datasource.max-idle=8
  122. spring.datasource.min-idle=8
  123. spring.datasource.initial-size=10
  124.  
  125. ####mybatis config ########
  126. mybatis.mapper-location= classpath:com/hzcf/mapper/*.xml
  127.  
  128. spring.application.name=provider
  129. # 注册中心
  130. eureka.client.serviceUrl.defaultZone=http://eureka:8761/eureka/

3.创建服务消费者 customer(用feign调用生产者:)

  1. package com.hzcf;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
  5. import org.springframework.cloud.netflix.feign.EnableFeignClients;
  6. @SpringBootApplication
  7. @EnableEurekaClient
  8. @EnableFeignClients
  9. public class CustomerApplication {
  10. public static void main(String[] args) {
  11. SpringApplication.run(CustomerApplication.class, args);
  12. }
  13.  
  14. }
  15.  
  16. Controller:
  17. package com.hzcf.controller;
  18. import org.springframework.beans.factory.annotation.Autowired;
  19. import org.springframework.web.bind.annotation.GetMapping;
  20. import org.springframework.web.bind.annotation.PathVariable;
  21. import org.springframework.web.bind.annotation.RestController;
  22. import com.hzcf.model.User;
  23. @RestController
  24. public class CustomerController {
  25.  
  26. @Autowired
  27. private CustomerFeignClient customerFeignClient;
  28. @GetMapping("/customer/{id}")
  29. public User findById(@PathVariable Long id) {
  30. return this.customerFeignClient.findById(id);
  31. }
  32.  
  33. }
  34.  
  35. FeignClient:
  36. package com.hzcf.controller;
  37. import org.springframework.cloud.netflix.feign.FeignClient;
  38. import org.springframework.web.bind.annotation.PathVariable;
  39. import org.springframework.web.bind.annotation.RequestMapping;
  40. import org.springframework.web.bind.annotation.RequestMethod;
  41.  
  42. import com.hzcf.model.User;
  43. @FeignClient("provider")
  44. public interface CustomerFeignClient {
  45.  
  46. @RequestMapping(value = "/findById/{id}", method = RequestMethod.GET)
  47. public User findById(@PathVariable("id") Long id);
  48. }

4.执行命令 生成jar包 
clean install -DskipTests

5.构建镜像并启动

  1. jar包上传到服务器,并分别创建Dockerfile文件
  2.  
  3. Eureka Dockerfile:
  4.  
  5. #基于哪个镜像
  6. FROM lwieske/java-8
  7. #将本地文件夹挂载到当前容器
  8. VOLUME /tmp
  9. ADD eureka-0.0.1-SNAPSHOT.jar app.jar
  10. RUN sh -c 'touch /app.jar'
  11. ENV JAVA_OPTS=""
  12. #声明暴露的端口
  13. EXPOSE 8761
  14. #配置容器启动后执行的命令
  15. ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
  16.  
  17. Provider Dockerfile:
  18.  
  19. #基于哪个镜像
  20. FROM lwieske/java-8
  21. #将本地文件夹挂载到当前容器
  22. VOLUME /tmp
  23. #赋值文件到容器
  24. ADD provider-0.0.1-SNAPSHOT.jar app.jar
  25. RUN sh -c 'touch /app.jar'
  26. ENV JAVA_OPTS=""
  27. #声明暴露的端口
  28. EXPOSE 9999
  29. #配置容器启动后执行的命令
  30. ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
  31.  
  32. Customer Dockerfile:
  33.  
  34. #基于哪个镜像
  35. FROM lwieske/java-8
  36. #将本地文件夹挂载到当前容器
  37. VOLUME /tmp
  38. #赋值文件到容器
  39. ADD customer-0.0.1-SNAPSHOT.jar app.jar
  40. RUN sh -c 'touch /app.jar'
  41. ENV JAVA_OPTS=""
  42. #声明暴露的端口
  43. EXPOSE 8763
  44. #配置容器启动后执行的命令
  45. ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
  46.  
  47. 创建docker-compose.yml
  48. version: '2'
  49. services:
  50. eureka:
  51. build: ./eureka #指定Dockerfile所在路径
  52. ports:
  53. - "8761:8761"
  54.  
  55. provider:
  56. build: ./provider
  57. ports:
  58. - "9999:9999"
  59. links:
  60. - "eureka"
  61.  
  62. customer:
  63. build: ./customer
  64. ports:
  65. - "8763:8763"
  66. links:
  67. - "eureka"
  68. - "provider"

6.服务器结构图如下

  

7.启动:

docker-compose up

  

查看生成的镜像:

docekr images

8.测试

访问注册中心:http://47.94.11.55:8761/

访问消费者:http://47.94.11.55:8763/customer/1

源码链接:https://download.csdn.net/download/qq_35314762/10620879

docker-compose编排springcloud微服务的更多相关文章

  1. 十一、Docker搭建部署SpringCloud微服务项目Demo

    环境介绍 技术选型:SpringCloud&SpringCloud Alibaba&Docker 微服务模块划分: 员工模块:ems-employees 部门模块:ems-depart ...

  2. 小D课堂 - 新版本微服务springcloud+Docker教程_3-04 SpringCloud微服务核心组件Eureka介绍和闭源后影响

    笔记 4.SpringCloud微服务核心组件Eureka介绍和闭源后影响     简介:         SpringCloud体系介绍             官方地址:http://projec ...

  3. 08 . Jenkins之SpringCloud微服务+Vue+Docker持续集成

    简介 大致流程 /* 1.开发人员每天把代码提交到Gitlab代码仓库 2.jenkins从gitlab中拉取项目源码,编译并打包成war包,然后构建Docker镜像,将镜像上传到Harbor私有仓库 ...

  4. Devops 开发运维高级篇之Jenkins+Docker+SpringCloud微服务持续集成(上)

    Devops 开发运维高级篇之Jenkins+Docker+SpringCloud微服务持续集成(上) Jenkins+Docker+SpringCloud持续集成流程说明 大致流程说明: 1) 开发 ...

  5. Devops 开发运维高级篇之Jenkins+Docker+SpringCloud微服务持续集成——部署方案优化

    Devops 开发运维高级篇之Jenkins+Docker+SpringCloud微服务持续集成--部署方案优化 之前我们做的方案部署都是只能选择一个微服务部署并只有一台生产服务器,每个微服务只有一个 ...

  6. Docker、kubernetes、微服务、SpringBoot/Cloud...好乱!到底要不要学?

    Docker.微服务日益火热的今天,相信标题上这些名词大家都不陌生.但也相信有很多同学并不够清楚他们的概念,不理解它们的关系,也可能有这样的疑惑:不知道跟我有没有关系?要不要学习?怎么去学习?学哪些东 ...

  7. QCon技术干货:个推基于Docker和Kubernetes的微服务实践

    2016年伊始,Docker无比兴盛,如今Kubernetes万人瞩目.在这个无比需要创新与速度的时代,由容器.微服务.DevOps构成的云原生席卷整个IT界.在近期举办的QCon全球软件开发大会上, ...

  8. springcloud微服务架构搭建

    SpringCloud微服务框架搭建 一.微服务架构 1.1什么是分布式 不同模块部署在不同服务器上 作用:分布式解决网站高并发带来问题 1.2什么是集群 多台服务器部署相同应用构成一个集群 作用:通 ...

  9. 使用Docker compose编排Laravel应用

    前言 Laravel官方开发环境推荐的是Homestead(其实就是一个封装好的Vagrant box),我感觉这个比较重,于是自己用Docker compose编排了一套开发环境,在这里分享下. 环 ...

随机推荐

  1. 转:openwrt 框架分析

    本文是本人对OpenWrt的Makefile的理解,并非转载.OpenWrt是一个典型的嵌入式Linux工程,了解OpenWrt的Makefile的工作过程对提高嵌入式Linux工程的开发能力有极其重 ...

  2. Unity3D 重写下拉菜单/Dropdown组件、开启每个按钮可用

    Override Dropdown Component 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) ...

  3. Unity 3D-Navigation网格导航系统使用教程

    Unity自带导航系统 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享.心创 ...

  4. django安装命令

    通过pip安装Django   ==指定版本号 pip install Django==2.0.2 查看djangoshifou安装成功:1.进入python ,2.import   django 查 ...

  5. 博客 first

    2016.10.28 这会是一个值得纪念的日子,我将会从此刻开始,1~2天不间断的更新我再软件,编程方面的学习历程和在大学的琐事. 希望N年后看到,能够回味. a good memery....... ...

  6. (17)模型层 -ORM之msql 单表的增、删、改、查 及其他操作

    单表操作-增.删.改.查 ret=models.User.objects.filter(id=1)  #这里的结果是一个queryset对象 ret=modles.User.Objects.filte ...

  7. 实验吧—隐写术——WP之 男神一般都很低调很低调的!!

    首先我们打开解题连接~ 是直接给我们下载了一个压缩文件,解压后得到: 确实是很帅的小哥哥呢,呵呵...... 分析题目提示,“获取隐藏在图片中的flag”,嗯~这句很重要,他决定了我们要先用那种工具 ...

  8. #505 1&2 A-C 后面未完成

    A. Doggo Recoloring 题目意思是给一个字符串(都是小写字母),如果有两个字符相同,我们可以将这两个字符变成其他字符,问能不能使字符串字母都一样 思路  有两个相同字符时就能:  字符 ...

  9. ios-根据单元格里的控件tag值,在方法外获得对应的section与row的值

    在cell的代理方法里:cellForRowAtIndexPath btn.tag = indexPath.section *100 + indexPath.row; [cell.exitPerson ...

  10. day39KNN算法和其他的算法

    PS: 1.现在明白为什么其他的同学一直都在做数字图像处理,matlab这种东西了,因为机器学习,其他底层主要是做预先处理,然后调用某一个算法 2.感觉knn算法就是根据先验数据计算下一个跟自己一样不 ...