2021-01-27实习日报

搭建监控数据聚合Turbine

注册中中心

启动项

package com.xfgg.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

配置文件

server:
  port: 8761
spring:
  application:
    name: eureka-server
eureka:
  instance:
    prefer-ip-address: true
    hostname: ${spring.cloud.client.ip-address}
    instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
聚合中心

启动项

package com.xfgg.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;
import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;
import org.springframework.cloud.netflix.turbine.EnableTurbine;

@SpringBootApplication
@EnableEurekaClient
@EnableHystrix
@EnableHystrixDashboard
@EnableTurbine
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

配置文件

server.port=8762
spring.application.name=hystrix-dashboard-turbine
eureka.instance.prefer-ip-address=true
eureka.instance.hostname=${spring.cloud.client.ip-address}
eureka.instance.instance-id=${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}
eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:8761/eureka/
turbine.app-config=turbine-a,turbine-b
turbine.aggregator.cluster-config=default
turbine.cluster-name-expression=new String("default")
hystrix.dashboard.proxy-stream-allow-list=127.0.0.1

服务A

启动项

package com.xfgg.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;
import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;
import org.springframework.cloud.openfeign.EnableFeignClients;

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
@EnableHystrixDashboard
@EnableHystrix
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

配置文件

server.port=8090
spring.application.name=turbine-a
eureka.instance.prefer-ip-address=true
eureka.instance.hostname=${spring.cloud.client.ip-address}
eureka.instance.instance-id=${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}
eureka.client.service-url.defaultZone= http://${eureka.instance.hostname}:8761/eureka/
management.endpoints.web.exposure.include=*
feign.hystrix.enabled=true

feign接口

package com.xfgg.demo.feign;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;

@FeignClient(value = "turbine-b",fallback = FeignApiFallBack.class)
public interface FeignApi {
    @RequestMapping("/b")
    String b();
}

feign回退实现类

package com.xfgg.demo.feign;

import org.springframework.stereotype.Component;

@Component
public class FeignApiFallBack implements FeignApi{

    @Override
    public String b() {
        return "Hello!aUseB fail";
    }
}

控制层调用A服务

package com.xfgg.demo.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ASayHelloController {
    @Value("${server.port}")
    private String port;

    @RequestMapping("/a")
    public String a(){
        return "Hello!Im a.port:"+port;
    }
}

A服务调用B服务

package com.xfgg.demo.controller;

import com.xfgg.demo.feign.FeignApi;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class AUseBFeignController {
    @Autowired(required = false)
    private FeignApi feignApi;

    @RequestMapping("/aUseB")
    public String aUseB(){
        return feignApi.b();
    }
}
服务B

服务B和服务A大致上一样只是修改了名字和调用的不同

测试

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

测试时是其中一个一直成功,另一个一直失败可以看出明显的差距
在这里插入图片描述

首先是最近10s的错误率一个是100%一个是0%
一个圆圈成粉色,另一个是绿色
颜色的变化——实例的健康程度:它的健康度从绿色、黄色、橙色、红色递减。
大小的变化——实例的请求流量:流量越大该实心圆就越大

一个短路熔断数为6,失败和异常数为1,另一个一切正常
曲线:用来记录2分钟内流量的相对变化,我们可以通过它来观察到流量的上升和下降趋势
测试的数据不够大看不出太大的变化,明天打算使用postman对代码进行测试

使用Mysql+mybatis进行增删改查

整体结构
在这里插入图片描述

配置文件
spring.application.name=client-school-provider
server.port=8762
eureka.client.service-url..defaultZone=http://localhost:8761/eureka/

#数据源相关配置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/kgc?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
spring.datasource.username=root
spring.datasource.password=123456

#映射xml文件
mybatis.mapper-locations=mapper/*.xml
mybatis.type-aliases-package=com.xfgg.demo
主文件
package com.xfgg.demo;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication
@EnableEurekaClient
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}
实体类
package com.xfgg.demo.entity;

import lombok.Data;

@Data
public class Classes {
    private Integer cid;
    private String cname;

    public String getCname() {
        return cname;
    }

    public void setCname(String cname) {
        this.cname = cname;
    }

    public Integer getCid() {
        return cid;
    }

    public void setCid(Integer cid) {
        this.cid = cid;
    }
}

package com.xfgg.demo.entity;

import lombok.Data;

@Data
public class Student {
    private Integer sid;
    private String sname;
    private String password;
    private String subject;
    private Float result;

    public Student(Integer sid, String sname, String password, String subject, Float result) {
        this.sid = sid;
        this.sname = sname;
        this.password = password;
        this.subject = subject;
        this.result = result;
    }

    public Student() {

    }

    public Integer getSid() {
        return sid;
    }

    public void setSid(Integer sid) {
        this.sid = sid;
    }

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getSubject() {
        return subject;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }

    public Float getResult() {
        return result;
    }

    public void setResult(Float result) {
        this.result = result;
    }
}

数据库编写
CREATE TABLE classes(
	cid int primary key auto_increment,
	cname varchar(10) not null
);
CREATE TABLE student(
	sid int primary key auto_increment,
	sname varchar(10) not null,
	password varchar(10) not null,
	subject varchar(10) not null,
	result float(3,1) not null
);

INSERT INTO classes (cid,cname) VALUES("1","KD59");
INSERT INTO classes (cid,cname) VALUES("2","KD66");
INSERT INTO classes (cid,cname) VALUES("3","KD67");

INSERT INTO student(sid,sname,password,subject,result) VALUES("1","张三","123","java","89.8");
INSERT INTO student(sid,sname,password,subject,result) VALUES("2","李四","123","html","88.8");
INSERT INTO student(sid,sname,password,subject,result) VALUES("3","王五","mysql","java","87.8");
mapper层
package com.xfgg.demo.mapper;

import com.xfgg.demo.entity.Classes;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;


import java.util.List;
@Mapper
public interface ClassesMapper {
    @Select("select * from classes")
    List<Classes> selectClasses();
}

package com.xfgg.demo.mapper;

import com.xfgg.demo.entity.Student;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Update;



import java.util.List;
import java.util.Map;
@Mapper
public interface StudentMapper {
    List<Map<String,Object>> selectStudent(Student student);
    @Insert("INSERT INTO kgc.student (sname,password,subject,result,cid) VALUES (#{sname},#{password},#{subject},#{result},#{classes.cid})")
    Integer insertStudent(Student student);
    @Update("UPDATE kgc.student SET sname =#{sname}, password =#{password}, subject =#{subject}, result =#{result}, cid =#{classes.cid} WHERE sid =#{sid}")
    Integer updateStudent(Student student);
    @Delete("delete from sudent where sid=#{sid}")
    Integer deleteStudent(Integer sid);
}

service接口层
package com.xfgg.demo.service;

import com.xfgg.demo.entity.Classes;

import java.util.List;

public interface ClassesService {
    List<Classes> showOptions();
}

package com.xfgg.demo.service;

import com.xfgg.demo.entity.Student;

import java.util.List;
import java.util.Map;

public interface StudentService {
    List<Map<String,Object>> showData();
    Map<String,Object> showInfo(Integer key);
    Map<String,Object> login(String sname,String password);
    Integer addData(Student student);
    Integer editData(Student student);
    Integer delData(Integer key);

}

service实现层
package com.xfgg.demo.service.impl;

import com.xfgg.demo.entity.Classes;
import com.xfgg.demo.mapper.ClassesMapper;
import com.xfgg.demo.service.ClassesService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;
@Service
public class ClassesServiceImpl implements ClassesService {
    @Resource
    private ClassesMapper mapper;
    @Override
    public List<Classes> showOptions() {
        return mapper.selectClasses();
    }
}

package com.xfgg.demo.service.impl;

import com.xfgg.demo.entity.Student;
import com.xfgg.demo.mapper.StudentMapper;
import com.xfgg.demo.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;

@Service
public class StudentServiceImpl implements StudentService {
    @Resource
    private StudentMapper mapper;
    @Override
    public List<Map<String, Object>> showData() {
        return mapper.selectStudent(new Student());
    }

    @Override
    public Map<String, Object> showInfo(Integer key) {
        Student student = new Student(key,null,null,null,null);
        Map<String,Object> map = mapper.selectStudent(student).get(0);
        return map;
    }

    @Override
    public Map<String, Object> login(String sname, String password) {
        Student student=new Student(null,sname,password,null,null);
        Map<String, Object> map=mapper.selectStudent(student).get(0);
        return map;
    }

    @Override
    public Integer addData(Student student) {
        return mapper.insertStudent(student);
    }

    @Override
    public Integer editData(Student student) {
        return mapper.updateStudent(student);
    }

    @Override
    public Integer delData(Integer key) {
        return mapper.deleteStudent(key);
    }
}

controller层
package com.xfgg.demo.controller;

import com.xfgg.demo.entity.Classes;
import com.xfgg.demo.entity.Student;
import com.xfgg.demo.service.ClassesService;
import com.xfgg.demo.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.List;
import java.util.Map;

@Controller
public class CenterController {
    @Autowired
    private ClassesService classesService;
    @Autowired
    private StudentService studentService;

    @RequestMapping("/options.do")
    public List<Classes> optionsData(){
        return classesService.showOptions();
    }

    @RequestMapping("/data.do")
    public List<Map<String,Object>> StuData(){
        return studentService.showData();
    }

    @RequestMapping("/info.do")
    public Map<String,Object> infoData(Integer key){
        return studentService.showInfo(key);
    }

    @RequestMapping("/login.do")
    public Map<String,Object> login(String sname,String password){
        return studentService.login(sname,password);
    }

    @RequestMapping("/add.do")
    public Integer addData(Student student){
        return studentService.addData(student);
    }

    @RequestMapping("/edit.do")
    public Integer editData(Student student){
        return studentService.editData(student);
    }

    @RequestMapping("/delete.do")
    public Integer delData(Integer key){
        return studentService.delData(key);
    }
}

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.xfgg.demo.mapper.StudentMapper">
    <select id="selectStudent" parameterType="Student" resultType="map">
        SELECT s.*,c.cname from student s,classes c where s.sid=c.cid
        <if test="sid!=null">
            and s.sid=#{sid}
        </if>
        <if test="sname!=null and password!=null">
            and s.sname=#{sname} and s.password=#{password}
        </if>
    </select>
</mapper>

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值