zoukankan      html  css  js  c++  java
  • docker-compose编排springcloud微服务

    .创建注册中心Eureka

    package com.dan.eurekaserver;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
    @EnableEurekaServer 
    @SpringBootApplication
    public class EurekaServerApplication {
        public static void main(String[] args) {
            SpringApplication.run(EurekaServerApplication.class, args);
        }
    }
    
    *Application.properties:*
    
    server.port=8761
    eureka.instance.prefer-ip-address=true
    eureka.client.register-with-eureka=false
    eureka.client.fetch-registry=false
    
    #注册地址
    eureka.client.serviceUrl.defaultZone=http://eureka:8761/eureka/

    2.创建服务提供者 provider

    ProviderApplication :
    
    package com.hzcf;
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
    @SpringBootApplication
    @EnableEurekaClient
    @MapperScan("com.hzcf.mapper")//扫描:该包下相应的class,主要是MyBatis的持久化类.
    public class ProviderApplication {
        public static void main(String[] args) {
            SpringApplication.run(ProviderApplication.class, args);
        }
    }
    
    
    
    Controller:
    package com.hzcf.controller;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.bind.annotation.RestController;
    import com.hzcf.model.User;
    import com.hzcf.service.UserService;
    
    @RestController
    public class UserController {
        @Autowired
        private UserService demoService;
        @GetMapping("/findById/{id}")
        @ResponseBody
        public User findById(@PathVariable Long id){
             User user = demoService.findOne(id);
             return user;
        }   
    }
    
    Service:
    package com.hzcf.service;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import com.hzcf.mapper.UserMapper;
    import com.hzcf.model.User;
    
    @Service
    public class UserService {
    
        @Autowired
        private UserMapper userMapper;
    
    
        public User findOne(Long id) {
            return userMapper.findOne(id);
        }
    }
    Mapper:
    package com.hzcf.mapper;
    import com.hzcf.model.User;
    public interface UserMapper {
        public User findOne(Long id);
    }
    
     <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
    <mapper namespace="com.hzcf.mapper.UserMapper" >
      <resultMap id="BaseResultMap" type="com.hzcf.model.User" >
        <id column="id" property="id" jdbcType="BIGINT" />
        <result column="name" property="name" jdbcType="VARCHAR" />
        <result column="password" property="password" jdbcType="VARCHAR" />
      </resultMap>
      <select id="findOne" parameterType="long" resultMap="BaseResultMap">
        select * from user where id = #{id}
      </select>
     </mapper>
    
    Model:
    package com.hzcf.model;
    
    public class User {
    
        private long id;
    
        private String name;
    
        private String password;
    
        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 String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
    
    }
    
    Application.properties
    
    #端口
    server.port=9999
    ###datasource
    ########################################################
    spring.datasource.url = jdbc:mysql://47.94.11.55:3306/test
    spring.datasource.username = root
    spring.datasource.password = 824824
    spring.datasource.driverClassName = com.mysql.jdbc.Driver
    spring.datasource.max-active=20
    spring.datasource.max-idle=8
    spring.datasource.min-idle=8
    spring.datasource.initial-size=10
    
    ####mybatis config ########
    mybatis.mapper-location= classpath:com/hzcf/mapper/*.xml
    
    spring.application.name=provider
    # 注册中心
    eureka.client.serviceUrl.defaultZone=http://eureka:8761/eureka/

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

    package com.hzcf;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
    import org.springframework.cloud.netflix.feign.EnableFeignClients;
    @SpringBootApplication
    @EnableEurekaClient
    @EnableFeignClients
    public class CustomerApplication {
        public static void main(String[] args) {
            SpringApplication.run(CustomerApplication.class, args);
        }
    
    }
    
    Controller:
    package com.hzcf.controller;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RestController;
    import com.hzcf.model.User;
    @RestController
    public class CustomerController {
    
          @Autowired
          private CustomerFeignClient customerFeignClient;
          @GetMapping("/customer/{id}")
          public User findById(@PathVariable Long id) {
            return this.customerFeignClient.findById(id);
          }
    
    }
    
    FeignClient:
    package com.hzcf.controller;
    import org.springframework.cloud.netflix.feign.FeignClient;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    
    import com.hzcf.model.User;
    @FeignClient("provider")
    public interface  CustomerFeignClient {
    
    
        @RequestMapping(value = "/findById/{id}", method = RequestMethod.GET)
        public User findById(@PathVariable("id") Long id); 
    }

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

    5.构建镜像并启动

    将jar包上传到服务器,并分别创建Dockerfile文件
    
    Eureka Dockerfile:
    
    #基于哪个镜像
    FROM lwieske/java-8
    #将本地文件夹挂载到当前容器
    VOLUME  /tmp
    ADD eureka-0.0.1-SNAPSHOT.jar app.jar
    RUN sh -c 'touch /app.jar'
    ENV JAVA_OPTS=""
    #声明暴露的端口
    EXPOSE 8761
    #配置容器启动后执行的命令
      ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
    
    Provider Dockerfile:
    
    #基于哪个镜像
    FROM lwieske/java-8
    #将本地文件夹挂载到当前容器
    VOLUME  /tmp
    #赋值文件到容器
    ADD provider-0.0.1-SNAPSHOT.jar app.jar
    RUN sh -c 'touch /app.jar'
    ENV JAVA_OPTS=""
    #声明暴露的端口
    EXPOSE 9999
    #配置容器启动后执行的命令
      ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
    
    Customer Dockerfile:
    
    #基于哪个镜像
    FROM lwieske/java-8
    #将本地文件夹挂载到当前容器
    VOLUME  /tmp
    #赋值文件到容器
    ADD customer-0.0.1-SNAPSHOT.jar app.jar
    RUN sh -c 'touch /app.jar'
    ENV JAVA_OPTS=""
    #声明暴露的端口
    EXPOSE 8763
    #配置容器启动后执行的命令
      ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
    
    
    创建docker-compose.yml
    version: '2'
    services:
     eureka:
       build: ./eureka   #指定Dockerfile所在路径
       ports:
         - "8761:8761"
    
     provider:
       build: ./provider
       ports:
         - "9999:9999"
       links:
         - "eureka"
    
    
     customer:
       build: ./customer
       ports:
         - "8763:8763"
       links:
         - "eureka"
         - "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

  • 相关阅读:
    MySQL源码编译与初始化
    Nginx基础优化
    企业级NginxWeb服务优化实战(下)
    企业级NginxWeb服务优化实战(上)
    Nginx+Keepalived高可用集群应用实践
    bzoj 2141: 排队
    zoj 2112 Dynamic Rankings
    bzoj 3196: Tyvj 1730 二逼平衡树
    bzoj 4004: [JLOI2015]装备购买
    bzoj 2300: [HAOI2011]防线修建
  • 原文地址:https://www.cnblogs.com/jiangzhaowei/p/10127550.html
Copyright © 2011-2022 走看看