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>

 


posted @ 2020-08-19 20:37  minnersun  阅读(244)  评论(0编辑  收藏  举报