为了账号安全,请及时绑定邮箱和手机立即绑定

SpringCloud 微服务架构——服务提供与服务消费

标签:
Spring Cloud

工欲善其事,必先利其器,本系列文章均在 STS 这个 IDE 下进行,该工具的下载地址见STS
JDK 选择 JDK1.8;
项目构建工具 Maven3

在进行整个架设之前我们需要考虑的是,一个提供服务的微服务和一个消费这个服务的微服务,我们以电影售票的案例为演示。

电影售票

用户向电影微服务发起购票请求,而购票服务得先去查询用户信息,这里用户微服务相当于服务提供者,电影微服务相当于服务调用者。
首先构建这两个微服务;

服务提供者

构建用户微服务

项目构建

1、创建一个Spring Starter 项目


webp

创建一个Spring Starter 项目


2、配置基本环境


webp

配置基本环境


3、增加依赖

webp

增加依赖


这里增加主要的几个依赖,其他的可以后续在 pom 中增加

修改一些

修改 src/main/resources下的application.propertiesapplication.yml

webp


application.yml 配置文件里面,首先修改服务端口为8000

webp


pom 中增加druid依赖包

<!-- 增加 druid -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.18</version>
        </dependency>

把包先构建好,这里暂时包括controller,mapper,servlet,filter,model,mapper

webp


启动类的基本配置

import org.mybatis.spring.annotation.MapperScan;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.web.servlet.ServletComponentScan;@SpringBootApplication@ServletComponentScan   //扫描Servlet  @MapperScan("cn.ts.ms.user.mapper")public class MsSimpleProviderUserApplication {    public static void main(String[] args) {
        SpringApplication.run(MsSimpleProviderUserApplication.class, args);
    }
}

数据库装备工作

构建一个 ebook 数据库,里面建立一个 USER

webp


数据库里面增加一条数据


webp

Druid 数据源配置

首先在 application.yml 里面配置相关链接等信息,注意缩进

spring:
    datasource:
        name: ebook        url: jdbc:mysql://localhost:3306/ebook
        username: root        password: root        # 使用druid数据源
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.jdbc.Driver
        filters: stat        maxActive: 20
        initialSize: 1
        maxWait: 60000
        minIdle: 1
        timeBetweenEvictionRunsMillis: 60000
        minEvictableIdleTimeMillis: 300000
        validationQuery: select 'x'
        testWhileIdle: true
        testOnBorrow: false
        testOnReturn: false
        poolPreparedStatements: true
        maxOpenPreparedStatements: 20

构建DruidDataSourceConfiguration配置类,来配置 Druid 构建的数据源

package cn.ts.ms.user;import javax.sql.DataSource;  
import org.springframework.boot.context.properties.ConfigurationProperties;  
import org.springframework.context.annotation.Bean;  
import org.springframework.context.annotation.Configuration;  
  
import com.alibaba.druid.pool.DruidDataSource;  
@Configuration  public class DruidDataSourceConfiguration {  
  
    @Bean  
    @ConfigurationProperties(prefix = "spring.datasource")  
    public DataSource druidDataSource() {  
        DruidDataSource druidDataSource = new DruidDataSource();  
        return druidDataSource;  
    }  
}

数据访问相关类

有了数据源,就需要 Model 来承载
构建 User 对象

package cn.ts.ms.user.model;import java.io.Serializable;import java.util.Date;public class User implements Serializable{    private static final long serialVersionUID = 1L;    private Integer id;    private String name;    private String password;    private String nickName;    private Date lastLoginDt;    public Integer getId() {        return id;
    }    public void setId(Integer 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;
    }    public String getNickName() {        return nickName;
    }    public void setNickName(String nickName) {        this.nickName = nickName;
    }    public Date getLastLoginDt() {        return lastLoginDt;
    }    public void setLastLoginDt(Date lastLoginDt) {        this.lastLoginDt = lastLoginDt;
    }
    
}

有了模型对象,就可以对对象进行 CRUD 操作,接下来构建 Mapper 接口,该接口必须放置在启动类的 MapperScan 标注的包里面,也就是cn.ts.ms.user.mapper

package cn.ts.ms.user.mapper;import org.apache.ibatis.annotations.Param;import org.apache.ibatis.annotations.Select;import cn.ts.ms.user.model.User;public interface UserMapper {    @Select("select * from user where id = #{id}")  
    User findUserById(@Param("id") String id);  
}

服务层和控制层

这里为了方面省略了服务层,直接在控制层调用 Mapper

package cn.ts.ms.user.controller;import javax.annotation.Resource;import org.springframework.boot.autoconfigure.EnableAutoConfiguration;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;import cn.ts.ms.user.mapper.UserMapper;import cn.ts.ms.user.model.User;@RestController  @RequestMapping("/user")  
@EnableAutoConfiguration  public class UserController {    @Resource  
    private UserMapper userMapper;  
     
    @RequestMapping("/find")  
    public User findUserById(@RequestParam String id){  
        return userMapper.findUserById(id);  
    } 
}

启动服务和测试

好了,有了上面的基本操作,我们可以启动服务来看看效果
项目名称上右键,如图操作

webp


或者

webp


我们来到浏览器输入http://localhost:8000/user/find?id=1

webp


由于没有在 SQL 里面做映射,导致有两个字段为 null
修改 mapper 的 sql 为@Select("select id,name,password,nick_name as nickName,last_login_dt as lastLoginDt from user where id = #{id}")
然后重启服务,在浏览结果为

webp


扩展

Druid 我们还可以进行配置他的监控,收需要做个过滤器,把我们需要监控的纳入进来

package cn.ts.ms.user.filter;import javax.servlet.annotation.WebFilter;import javax.servlet.annotation.WebInitParam;import com.alibaba.druid.support.http.WebStatFilter;@WebFilter(filterName = "druidWebStatFilter", urlPatterns = "/*", initParams = {        @WebInitParam(name = "exclusions", value = "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*")// 忽略资源})public class DruidStatFilter extends WebStatFilter {

}

然后建立一个 servlet,这个 servlet如下

package cn.ts.ms.user.filter;import com.alibaba.druid.support.http.StatViewServlet;  
import javax.servlet.annotation.WebServlet;  
import javax.servlet.annotation.WebInitParam;  
@WebServlet(urlPatterns = "/druid/*",   
    initParams={  
            @WebInitParam(name="allow",value="127.0.0.1"),// IP白名单 (没有配置或者为空,则允许所有访问)  
            @WebInitParam(name="deny",value="192.168.16.111"),// IP黑名单 (存在共同时,deny优先于allow)  
            @WebInitParam(name="loginUsername",value="admin"),// 用户名  
            @WebInitParam(name="loginPassword",value="123"),// 密码  
            @WebInitParam(name="resetEnable",value="false")// 禁用HTML页面上的“Reset All”功能  
    })  
public class DruidStatViewServlet extends StatViewServlet {  
    private static final long serialVersionUID = 1L;  
      
}

在浏览器输入http://localhost:8000/druid
会出现一个登录框,输入用户名和密码,在DruidStatViewServlet里面有配置

webp


于是就进入到 Druid 的控制页面

webp


我们利用 Druid 可以查看如下各个信息,非常强大

webp


至此我们的微服务提供端就开发好了,当然这里只是一个简易演示,实际生产环境会有更多配置



作者:breezedancer
链接:https://www.jianshu.com/p/0fd5d21b4805


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消