1,建module
2,改pom
3,写yml
4,主启动
5,业务类
新建一个父级项目
POM文件
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.company.springcloud2020</groupId> <artifactId>springcloud</artifactId> <version>1.0-SNAPSHOT</version> <modules> <module>cloud-eureka-server7001</module> <module>cloud-eureka-server7002</module> <module>cloud-api-commons</module> <module>cloud-provider-payment8001</module> <module>cloud-provider-payment8002</module> <module>cloud-consumer-order80</module> </modules> <packaging>pom</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <junit>4.12</junit> <log4j.version>1.27</log4j.version> <mysql.version>8.0.18</mysql.version> <druid.version>1.1.16</druid.version> <mybatis.spring.boot.version>2.1.1</mybatis.spring.boot.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-project-info-reports-plugin</artifactId> <version>3.0.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.2.2.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Hoxton.SR1</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2.1.0.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> <scope>runtime</scope> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>${druid.version}</version> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>${mybatis.spring.boot.version}</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.2.2.RELEASE</version> <configuration> <fork>true</fork> <addResources>true</addResources> </configuration> </plugin> </plugins> </build> </project>
Eureka集群环境构建
Eureka注册中心模块7001
1,POM文件
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>springcloud</artifactId> <groupId>com.company.springcloud2020</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>cloud-eureka-server7001</artifactId> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> <version>2.2.1.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-test</artifactId> </dependency> </dependencies> </project>
2,YML文件
server:
port: 7001
spring:
application:
name: cloud-eureka-server
eureka:
client:
fetch-registry: false
register-with-eureka: false
service-url:
defaultZone: http://eureka7002.com:7002/eureka
instance:
hostname: eureka7001.com
3,主启动类
@SpringBootApplication @EnableEurekaServer public class EurekaServer7001Main { public static void main(String[] args) { SpringApplication.run(EurekaServer7001Main.class,args); } }
Eureka注册中心模块7002,与7001相互注册,相互守望。pom文件一致,yml和住启动类略微区别
1,YML文件
server:
port: 7002
spring:
application:
name: cloud-eureka-server
eureka:
client:
fetch-registry: false
register-with-eureka: false
service-url:
defaultZone: http://eureka7001.com:7001/eureka
instance:
hostname: eureka7002.com
2,主启动类
@SpringBootApplication @EnableEurekaServer public class EurekaServer7002Main { public static void main(String[] args) { SpringApplication.run(EurekaServer7002Main.class,args); } }
支付微服务集群配置
支付模块8001
1,POM文件
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>springcloud</artifactId> <groupId>com.company.springcloud2020</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>cloud-provider-payment8001</artifactId> <dependencies> <dependency> <groupId>com.company.springcloud2020</groupId> <artifactId>cloud-api-commons</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.10</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-test</artifactId> </dependency> </dependencies> </project>
2,YML文件
server: port: 8001 spring: application: name: cloud-payment-service datasource: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/db2019?characterEncoding=utf-8&useSSL=false&useUnicode=true&serverTimezone=GMT username: sa password: admin eureka: client: fetch-registry: true register-with-eureka: true service-url: defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka instance: instance-id: payment8001 prefer-ip-address: true lease-renewal-interval-in-seconds: 30 lease-expiration-duration-in-seconds: 90 mybatis: mapper-locations: classpath*:mapper/*.xml type-aliases-package: com.company.pojo
3,主启动类
@SpringBootApplication @EnableEurekaClient public class Payment8001Main { public static void main(String[] args) { SpringApplication.run(Payment8001Main.class,args); } }
4,mapper接口及Mapper.xml文件
@Mapper public interface PaymentMapper { int savePayment(Payment payment); Payment getPaymentById(Integer 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.company.mapper.PaymentMapper"> <insert id="savePayment" parameterType="payment" useGeneratedKeys="true" keyProperty="id" keyColumn="id"> insert into payment(serial) values(#{serial}) </insert> <select id="getPaymentById" parameterType="Integer" resultType="payment"> select * from payment where id=#{id} </select> </mapper>
5,service接口以及实现
public interface PaymentService { int savePayment(Payment payment); Payment getPaymentById(Integer id); }
@Service public class PaymentServiceImpl implements PaymentService { @Autowired private PaymentMapper paymentMapper; @Override public int savePayment(Payment payment) { return paymentMapper.savePayment(payment); } @Override public Payment getPaymentById(Integer id) { return paymentMapper.getPaymentById(id); } }
6,controller层
@RestController public class PaymentController { @Autowired private PaymentService paymentService; @Value("${server.port}") private String serverPort; @GetMapping("/payment/{id}") @ResponseBody public CommonRestult getPayment(@PathVariable("id") Integer id){ Payment payment = paymentService.getPaymentById(id); if(payment!=null){ return new CommonRestult(200,"成功获取 port:"+serverPort,payment); }else{ return new CommonRestult(404,"获取失败 port:"+serverPort+" id:"+id); } } @PostMapping("/payment") @ResponseBody public CommonRestult savePayment(@RequestBody Payment payment){ int i = paymentService.savePayment(payment); if(i>0){ return new CommonRestult(200,"保存成功 port:"+serverPort,payment); }else{ return new CommonRestult(404,"保存失败 port:"+serverPort); } } }
支付模块8002与8001模块基本一样
订单模块81
1,POM文件
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>springcloud</artifactId> <groupId>com.company.springcloud2020</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>cloud-consumer-order80</artifactId> <dependencies> <dependency> <groupId>com.company.springcloud2020</groupId> <artifactId>cloud-api-commons</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-test</artifactId> </dependency> </dependencies> </project>
2,YML文件
server:
port: 81
spring:
application:
name: cloud-consumer-service
eureka:
client:
fetch-registry: true
register-with-eureka: true
service-url:
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka
instance:
instance-id: order80
lease-renewal-interval-in-seconds: 30
lease-expiration-duration-in-seconds: 90
prefer-ip-address: true
3,主启动类
@SpringBootApplication @EnableEurekaClient public class Order81Main { public static void main(String[] args) { SpringApplication.run(Order80Main.class,args); } }
4,配置文件
@Configuration public class MyConfig { @Bean @LoadBalanced public RestTemplate restTemplate(){ return new RestTemplate(); } }
5,控制层
@RestController public class OrderController { private final String URL="http://CLOUD-PAYMENT-SERVICE"; @Autowired private RestTemplate restTemplate; @PostMapping("/consumer/payment") @ResponseBody public CommonRestult savePayment(@RequestBody Payment payment){ CommonRestult commonRestult = restTemplate.postForObject(URL+"/payment", payment, CommonRestult.class); return commonRestult; } @GetMapping("/consumer/payment/{id}") @ResponseBody public CommonRestult getPaymentById(@PathVariable("id") Integer id){ CommonRestult commonRestult = restTemplate.getForObject(URL + "/payment/" + id, CommonRestult.class); return commonRestult; } }
RestTemplate提供多种便捷访问远程http服务的方法,是一种简单便捷的访问restful服务模板类,是Spring提供的用于Rest服务的客户端模板工具集。
使用restTemplate访问restful接口,(url,requestMap,ResponseBean.class)这三个参数分别代表REST请求地址、请求参数、HTTP响应转换成接收对象类型。
@LoadBalanced:表示ribbon负载均衡采用轮询策略。
posted on
浙公网安备 33010602011771号