Zuul
zuul介绍
为服务框架springcloud中的网关组件,控制管理这所有集群节点
搭建一个网关节点
pom.xml
parent
springcloud
导入
zuul
网关组件依赖
Eureka
客户端依赖
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9.RELEASE</version> </parent> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Edgware.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zuul</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency>
src/main/resourse
application.properties
匹配规则
?
:匹配一个字符
*
:匹配一个字符串,不支持多级
**
:任意字符字符串,任意级别
server.port=8103
# service name
spring.application.name=service-zuul
#Eureka client
eureka.instance.ipAddressPrefer=true
eureka.client.registerWithEureka=true
eureka.client.fetchRegistry=true
eureka.client.serviceUrl.defaultZone=http://localhost:8888/eureka
#service-ribbon
zuul.routes.api-a.path=/zuul-hi/**
zuul.routes.api-a.serviceId=service-hi
src/main/java
com.wiscom
StarterZuul.java
package com.wiscom; @SpringBootApplication @EnableZuulProxy public class StarterZuul { public static void main(String[] args) { SpringApplication.run(StarterZuul.class, args); } }
利用微服务架构组件整合order-user的拆分系统
zuul-gateway01
pom.xml
<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.wiscom</groupId> <artifactId>zuul-gateway01</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>zuul-gateway01</name> <url>http://maven.apache.org</url> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9.RELEASE</version> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zuul</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Edgware.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> </project>
src/main/resourses
application.properties
server.port=8103
# service name
spring.application.name=service-zuul
#Eureka client
eureka.instance.ipAddressPrefer=true
eureka.client.registerWithEureka=true
eureka.client.fetchRegistry=true
eureka.client.serviceUrl.defaultZone=http://localhost:8888/eureka
#service-hi
zuul.routes.api-a.path=/zuul-hi/**
zuul.routes.api-a.serviceId=service-hi
#service-ribbon
zuul.routes.api-b.path=/zuul-ribbon/**
zuul.routes.api-b.serviceId=service-ribbon
zuul.routes.ordertest.path=/zuul-order-test/**
zuul.routes.ordertest.serviceId=ordertest
zuul.routes.usertest.path=/zuul-user-test/**
zuul.routes.usertest.serviceId=usertest
src/main/java
com.wiscom
StarterZuul.java
package com.wiscom; @SpringBootApplication @EnableZuulProxy public class StarterZuul { public static void main(String[] args) { SpringApplication.run(StarterZuul.class, args); } }
zuul-gateway02
配置与
zuul-gateway01
相同,将端口改为8104即可
eureka-server01
pom.xml
<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.wiscom</groupId> <artifactId>eureka-server01</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9.RELEASE</version> </parent> <name>eureka-server01</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Edgware.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
src/main/resourses
application.properties
server.port=8888
#Eureka
eureka.instance.hostname=localhost
eureka.instance.preferIpAddress=true
eureka.client.registerWithEureka=true
eureka.client.fetchRegistry=true
eureka.client.serviceUrl.defaultZone=http://localhost:8889/eureka
eureka.server.enable-self-preservation=false
src/main/java
com.wiscom
StarterEurekaServer.java
package com.wiscom; @SpringBootApplication //启动eureka注册中心的进程 @EnableEurekaServer public class StarterEurekaServer { public static void main(String[] args) { SpringApplication.run(StarterEurekaServer.class, args); } }
eureka-server02
配置与
eureka-server01
一样,将端口改为8889即可
Order
pom.xml
parent
dependencyManagement
eureka
ribbon
:需要调用服务时使用
<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.wiscom</groupId> <artifactId>springboot-demo02</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>springboot-demo02</name> <url>http://maven.apache.org</url> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9.RELEASE</version> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.0</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.14</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Edgware.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> </project>
src/main/resourses
application.properties
server.port=8092
#spring.datasource.driverClassName=com.jdbc.mysql.Driver
#datasource
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql:///orderuser
spring.datasource.username=root
spring.datasource.password=root
#druid datasource
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.
#mybatis
mybatis.mapperLocations=classpath:mapper/*.xml
mybatis.typeAliasesPackage=com.wiscom.domain
mybatis.configuration.mapUnderscoreToCamelCase=true
mybatis.configuration.cacheEnabled=false
#eureka client
spring.application.name=ordertest
eureka.client.serviceUrl.defaultZone=http://localhost:8888/eureka
#redis
#rabbitmq
#elasticsearch
mapper
OrderMapper.xml
<?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.wiscom.mapper.OrderMapper"> <select id="queryOrder" parameterType="String" resultType="Order"> select * from t_order where order_id=#{orderId} </select> </mapper>
src/main/java
com.wiscom
StartOrder.java
package com.wiscom; @SpringBootApplication @MapperScan("com.wiscom.mapper") @EnableEurekaClient public class StarterOrder { public static void main(String[] args) { SpringApplication.run(StarterOrder.class, args); } //Bean LoadBalanced @Bean @LoadBalanced public RestTemplate init(){ return new RestTemplate(); } }
com.wiscom.controller
OrderController.java
package com.wiscom.controller; @RestController public class OrderController { @Autowired private OrderService ouService; @RequestMapping("order/pay") public Integer orderPayUserUpdatePoint(String orderId){ try{ ouService.orderPayUserUpdatePoint(orderId); return 1; }catch(Exception e){ e.printStackTrace(); return 0; } } }
com.wiscom.service
OrderService.java
package com.wiscom.service; @Service public class OrderService { @Autowired private RestTemplate client; @Autowired private OrderMapper ouMapper; public void orderPayUserUpdatePoint(String orderId) { Order order=ouMapper.queryOrder(orderId); //正好打折日 Integer orderMoney=order.getOrderMoney(); Integer payMoney=(int) (orderMoney*0.8); System.out.println("您的用户:"+order.getUserId()+"支付金额:"+payMoney); //支付完成 //通知user系统做积分 //根据接口文件定义,将支付的金额,和支付的用户信息传递给user系统 //RestTemplate client=new RestTemplate(); //根据接口访问 /user/update/points?userId&orderMoney String url="http://usertest/user/update" + "/points?userId="+order.getUserId() +"&orderMoney="+payMoney; //发起请求,交给用户系统处理积分逻辑,数据最终一致性 client.getForObject(url, Integer.class); } }
com.wiscom.domain
Order.java
package com.wiscom.domain; public class Order { private String orderId; private Integer orderMoney; private String userId; }
User.java
package com.wiscom.domain; public class User { private String userId; private Integer lev; private Integer points; }
com.wiscom.mapper
OrderMapper.java
package com.wiscom.mapper; import com.wiscom.domain.Order; import com.wiscom.domain.User; public interface OrderMapper { User queryUser(String userId); Order queryOrder(String orderId); void updateUserPoints(User user); }
User
pom.xml
<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.wiscom</groupId> <artifactId>springboot-demo02</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>springboot-demo02</name> <url>http://maven.apache.org</url> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9.RELEASE</version> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.0</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.14</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Edgware.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> </project>
src/main/resources
application.properties
server.port=8091
#spring.datasource.driverClassName=com.jdbc.mysql.Driver
#datasource
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql:///orderuser
spring.datasource.username=root
spring.datasource.password=root
#druid datasource
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.
#mybatis
mybatis.mapperLocations=classpath:mapper/*.xml
mybatis.typeAliasesPackage=com.wiscom.domain
mybatis.configuration.mapUnderscoreToCamelCase=true
mybatis.configuration.cacheEnabled=false
#eureka client
spring.application.name=usertest
eureka.client.serviceUrl.defaultZone=http://localhost:8888/eureka
#redis
#rabbitmq
#elasticsearch
mapper
<?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.wiscom.mapper.UserMapper"> <select id="queryUser" parameterType="String" resultType="User"> select * from t_user where user_id=#{userId} </select> <!-- <select id="queryOrder" parameterType="String" resultType="Order"> select * from t_order where order_id=#{orderId} </select> <update id="updateUserPoints" parameterType="User"> update t_user set points=#{points} where user_id=#{userId} </update> --> <update id="updateUser" parameterType="User"> update t_user set points=#{points} where user_id=#{userId} </update> </mapper>
src/main/java
com.wiscom
StarterUser.java
package com.wiscom; @SpringBootApplication @MapperScan("com.wiscom.mapper") @EnableEurekaClient public class StarterUser { public static void main(String[] args) { SpringApplication.run(StarterUser.class, args); } }
com.wiscom.controller
UserController.java
package com.wiscom.controller; @RestController public class UserController { @Autowired private UserService ouService; @RequestMapping("user/query/point") public User queryUserPoint(String userId){ User user=ouService.queryUser(userId); return user; } //根据用户id,支付金额编写积分新增 @RequestMapping("user/update/points") public Integer updateUserPoint(String userId,Integer orderMoney){ try{ ouService.updateUserPoint(userId,orderMoney); return 1; }catch(Exception e){ e.printStackTrace(); return 0; } } }
com.wiscom.service
UserService.java
package com.wiscom.controller; @RestController public class UserController { @Autowired private UserService ouService; @RequestMapping("user/query/point") public User queryUserPoint(String userId){ User user=ouService.queryUser(userId); return user; } //根据用户id,支付金额编写积分新增 @RequestMapping("user/update/points") public Integer updateUserPoint(String userId,Integer orderMoney){ try{ ouService.updateUserPoint(userId,orderMoney); return 1; }catch(Exception e){ e.printStackTrace(); return 0; } } }
com.wiscom.domain
User.java
package com.wiscom.domain; public class User { private String userId; private Integer lev; private Integer points; }
com.wiscom.mapper
UserMapper.java
package com.wiscom.mapper; import com.wiscom.domain.User; public interface UserMapper { User queryUser(String userId); void updateUser(User user); }
springboot工程打包
运行
maven install eclipse
的插件命令将工程打包java -jar **.jar
直接占用命令提示符的控制台输出日志
java -jar **.jar>server01.log
将会在运行时将所有日志输出到server01.log
java -jar **.jar --server.port=8761
利用选项中的值8761覆盖配置文件中application.properties server.port
<build> <plugins> <!--springboot的工程打包插件plugin,提供main方法的主清单属性--> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</plugin> </plugin> </plugins> </build>
保存redis相关笔记