1.Feign集成hystrix

feign默认不继承,如果需要得手动设置。

1.1加依赖yhstrix、actuator

1.2在yml中配置

#feign启用hystrix
feign:
  hystrix:
    enabled: true
#暴露端点
management:
  endpoints:
    web:
      exposure:
        include: hystrix.stream

1.3启动类上加注解

输入首字母都会有提示

image.png

1.4在声明式接口上加 降级的类名

@FeignClient(name="item-service",fallback = ItemClientFB.class)

image.png

然后创建这个类,并实现对应的接口,重写其中的方法。

image.png

1.5启动的时候,如果没加依赖。会报这个错误

image.png

2.订单调用商品、用户

2.1加依赖:feign、hystrix、actuator

2.2yml中启用hystrix和暴露hystrix.stream

启用hystrix
feign:
 hystrix:
  enabled:true
暴露hystrix.stream
m.e.w.e.i然后又提示
management:
  endpoints:
    web:
      exposure:
        include: hystrix.stream
  

2.3在启动类上加注解

@EnableFeignClients、@EnableCircuitBreaker

2.4添加商品和用户的声明式客户端接口

image.png

然后创建降级类并让降级类实现对应接口    

image.png

@Component
public class ItemClientFB implements ItemClient{
    @Override
 public JsonResult<List<Item>> getItems(String orderId) {
        //模拟缓存数据
 if(Math.random()<0.5){
            ArrayList<Item> list = new ArrayList<>();
            list.add(new Item(1,"缓存商品1",1));
            list.add(new Item(2,"缓存商品2",1));
            list.add(new Item(3,"缓存商品3",1));
            list.add(new Item(4,"缓存商品4",1));
            list.add(new Item(5,"缓存商品5",4));
            return JsonResult.ok().data(list);
        }
        return JsonResult.err().msg("调用商品失败");
    }
    @Override
 public JsonResult descreaseNumber(List<Item> items) {
        return JsonResult.err().msg("调用商品失败");
    }
}

image.png

@Component
public class UserClientFB implements UserClient{
    @Override
 public JsonResult<User> getUser(Integer userId) {
        if (Math.random() < 0.5) {
            User user = new User(8,"缓存用户名","很聪明吗");
            return JsonResult.ok().data(user);
        }
        return JsonResult.err().msg("调用用户失败");
    }
    @Override
 public JsonResult addScore(Integer userId, Integer score) {
        return JsonResult.err().msg("调用用户失败");
    }
}

image.png

@Service
@Slf4j
public class OrderServiceImpl implements OrderService {
    @Qualifier("cn.tedu.sp04.feign.ItemClient")
    @Autowired
 private ItemClient itemClient;
    @Qualifier("cn.tedu.sp04.feign.UserClient")
    @Autowired
 private UserClient userClient;
    @Override
 public Order getOrder(String orderId) {
log.info("获取订单:orderId="+orderId);
        //远程调用商品服务,获取商品列表
 JsonResult<List<Item>> items = itemClient.getItems(orderId);
        //远程调用用户服务,获取用户列表
 JsonResult<User> user = userClient.getUser(8);
        //写死订单数据
 Order order = new Order();
        order.setId(orderId);
        order.setUser(user.getData());
        order.setItems(items.getData());
        return order;
    }
    @Override
 public void saveOrder(Order order) {
        log.info("保存订单:"+order);
        //远程调用商品服务,减少商品库存
 //itemClient.descreaseNumber(items);
 itemClient.descreaseNumber(order.getItems());
        //远程调用用户服务,增加用户积分
 userClient.addScore(order.getUser().getId(),100);
    }
}

3.Turbin

聚合监控数据
从多台服务器抓取监控数据,进行聚合
hystrix dashboard可以从turbine抓取聚合后的数据

3.1步骤

1.新建项目sp10-turbin
2.加依赖:turbin、eureka client
3.yml配置:
    1.聚合的服务id:order-service,id2,id3...
    2.聚合数据名,默认名是default
4.启动类上加注解@EnableTurbin
5.http://localhost:5001/turbine.stream

3.1.1

新建项目、加依赖省略
spring:
  application:
    name: turbin
server:
  port: 5001
eureka:
  client:
    service-url:
      defaultZone: http://eureka1:2001/eureka,http://eureka2:2002/eureka
turbine:
  app-config: order-service
  #聚合后数据名字.注意格式:new String("default")
 cluster-name-expression: new String("default")

3.1.2访问如图

image.png
image.png
image.png

4 RabbitMQ(信息服务)很重要

1.克隆centos-7-1908(关机后在克隆)
2.设置ip
    ./ip-static
    192.168.64.140
    ipconfig(我的不管用)或
    ip addr
3.用monaxterm连接140
4.将离线安装文件(rabbitmq-install)上传到root目录,我的在D:\天翼云盘下载\课前资料\亿发课前资料-2003\亿发课前资料\亿发课前资料\rabbitmq\rabbitmq-install

4.1关机后克隆,一路默认

image.png
image.png

4.2

image.png

用monaxterm连接上虚拟机后,把安装文件传到root目录,直接拖进去就行

image.png

到rabbitmq-install进行安装
rpm -ivh *.rpm

image.png

启动rabbitmq服务器

# 设置服务,开机自动启动
systemctl enable rabbitmq-server

# 启动服务
systemctl start rabbitmq-server

4.3rabbitmq管理界面

启用管理界面
# 开启管理界面插件
rabbitmq-plugins enable rabbitmq_management

# 防火墙打开 15672 管理端口
firewall-cmd --zone=public --add-port=15672/tcp --permanent
firewall-cmd --reload
重启rabbitmq服务    
    systemctl restart rabbitmq-server
访问
访问服务器的`15672`端口,例如:
http://192.168.64.140:15672

image.png

4.4添加用户

# 添加用户
rabbitmqctl add_user admin admin

# 新用户设置用户为超级管理员
rabbitmqctl set_user_tags admin administrator

4.5### 设置访问权限

image.png
image.png


!大个
7 声望0 粉丝