SpringCloud 微服务架构——服务提供与服务消费
工欲善其事,必先利其器,本系列文章均在 STS 这个 IDE 下进行,该工具的下载地址见STS;
JDK 选择 JDK1.8;
项目构建工具 Maven3
在进行整个架设之前我们需要考虑的是,一个提供服务的微服务和一个消费这个服务的微服务,我们以电影售票的案例为演示。
电影售票
用户向电影微服务发起购票请求,而购票服务得先去查询用户信息,这里用户微服务相当于服务提供者,电影微服务相当于服务调用者。
首先构建这两个微服务;
服务提供者
构建用户微服务
项目构建
1、创建一个Spring Starter 项目
创建一个Spring Starter 项目
2、配置基本环境
配置基本环境
3、增加依赖
增加依赖
这里增加主要的几个依赖,其他的可以后续在 pom 中增加
修改一些
修改 src/main/resources
下的application.properties
为 application.yml
在 application.yml
配置文件里面,首先修改服务端口为8000
在 pom
中增加druid依赖包
<!-- 增加 druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.18</version> </dependency>
把包先构建好,这里暂时包括controller
,mapper
,servlet
,filter
,model
,mapper
启动类的基本配置
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
表
数据库里面增加一条数据
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); } }
启动服务和测试
好了,有了上面的基本操作,我们可以启动服务来看看效果
项目名称上右键,如图操作
或者
我们来到浏览器输入http://localhost:8000/user/find?id=1
由于没有在 SQL 里面做映射,导致有两个字段为 null
修改 mapper 的 sql 为@Select("select id,name,password,nick_name as nickName,last_login_dt as lastLoginDt from user where id = #{id}")
然后重启服务,在浏览结果为
扩展
对 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
里面有配置
于是就进入到 Druid 的控制页面
我们利用 Druid 可以查看如下各个信息,非常强大
至此我们的微服务提供端就开发好了,当然这里只是一个简易演示,实际生产环境会有更多配置
作者:breezedancer
链接:https://www.jianshu.com/p/0fd5d21b4805
共同学习,写下你的评论
评论加载中...
作者其他优质文章