springCloud小Demo


euraka服务器:
配置文件:
server:
  port: 8761

eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
  server:
    enable-self-preservation: true

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {

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

}

product-api  Api

FeignClient接口
@FeignClient(name = "PRODUCT-SERVER",fallback = ProductFeignHystrix.class)
public interface ProductFeignApi {
    @GetMapping("/api/v1/product/find")
    Product find(@RequestParam("id") Long id);
}

@Component
public class ProductFeignHystrix implements ProductFeignApi {
    @Override
    public Product find(Long id) {
        System.out.println("兜底数据");
        return null;
    }
}
服务端:
配置
spring:
  application:
    name: product-server
  cloud:
    config:
      discovery:
        service-id: config-server
        enabled: true
      label: master
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
      
@RestController
@Slf4j
public class ProductFeignClient implements ProductFeignApi {
    @Autowired
    private IProductService productService;
    @Value("${server.port}")
    private String port;
    @Override
    public Product find(Long id) {
        log.info("ProductFeignClient查找商品");
        Product product = productService.get(id);
        Product result = new Product();
        BeanUtils.copyProperties(product,result);
        result.setName(result.getName()+",data from "+port);
        System.out.println("进入....."+port);
        try {
            TimeUnit.SECONDS.sleep(5);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return result;
    }
}
@Service
public class ProductServiceImpl implements IProductService {
    @Autowired
    private ProductMapper productMapper;
    @Override
    public List<Product> list() {
        return productMapper.list();
    }

    @Override
    public Product get(Long id) {
        return productMapper.get(id);
    }
}

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

订单服务
spring:
  application:
    name: order-server
  cloud:
    config:
      discovery:
        service-id: config-server
        enabled: true
      label: master
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

      
@Slf4j
@RestController
@RequestMapping("/api/v1/order")
public class OrderController {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    @Autowired
    private IOrderService orderService;
    @HystrixCommand(fallbackMethod = "saveFail")
    @RequestMapping("/save")
    public Order save(Long userId, Long productId, HttpServletRequest request){
        log.info("Controller开始下单");
        String token = request.getHeader("token");
        String cookie = request.getHeader("Cookie");
        System.out.println("token="+token+",cookie="+cookie);
        return orderService.save(userId,productId);
    }
    public Order saveFail(Long userId,Long productId, HttpServletRequest request){
        System.out.println("in.");
        new Thread(()->{
            String redisKey = "order-save";
            String value = stringRedisTemplate.opsForValue().get(redisKey);
            if(StringUtils.isEmpty(value)){
                System.out.println("order下订单服务失败,请查找原因.");
                stringRedisTemplate.opsForValue().set(redisKey,"save-order-fail",20, TimeUnit.SECONDS);
            }else{
                System.out.println("已经发送过短信");
            }
        }).start();
        return new Order();
    }
}

@Slf4j
@Service
public class OrderServiceImpl implements IOrderService {

    @Autowired
    private ProductFeignApi productFeignApi;
    @Override
    public Order save(Long userId, Long productId) {
        log.info("OrderServiceImpl开始下单");
        Product product = productFeignApi.find(productId);
        if(product==null){
            System.out.println("调用远程服务异常");
        }
        Order order = new Order();
        order.setOrderNo(UUID.randomUUID().toString().replace("-",""));
        order.setCreateTime(new Date());
        order.setUserId(userId);
        if(product==null){
            System.out.println("调用远程服务异常");
        }else{
            order.setProductName(product.getName());
            order.setProductPrice(product.getPrice());
        }

        System.out.println("执行保存订单操作");
        return order;
    }
}
@SpringBootApplication
@EnableFeignClients
@EnableCircuitBreaker
@EnableHystrixDashboard
public class OrderServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(OrderServerApplication.class, args);
    }
}


网关配置
server:
  port: 9000
spring:
  application:
    name: zuul-server
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
zuul:
  ignoredPatterns: /*-server/**
  routes:
    order-server-route:
      path: /order/**
      serviceId: order-server
      sensitiveHeaders:
    product-server-route:
      path: /product/**
      serviceId: product-server
order-server:
  ribbon:
    ConnectTimeout: 6000
    ReadTimeout: 6000

    
@Component
public class AuthZuulFilter extends ZuulFilter {
    @Override
    public String filterType() {
        return FilterConstants.PRE_TYPE;
    }

    @Override
    public int filterOrder() {
        return 1;
    }

    @Override
    public boolean shouldFilter() {
        RequestContext requestContext = RequestContext.getCurrentContext();
        HttpServletRequest request = requestContext.getRequest();
        if(request.getRequestURI().indexOf("/order/api/")>=0){
            return true;
        }
        return false;
    }

    @Override
    public Object run() throws ZuulException {
        RequestContext requestContext = RequestContext.getCurrentContext();
        HttpServletRequest request = requestContext.getRequest();
        String cookie = request.getHeader("Cookie");
        if(StringUtils.isEmpty(cookie)){
            cookie = request.getParameter("Cookie");
        }
        if(StringUtils.isEmpty(cookie)){
            requestContext.setSendZuulResponse(false);
            requestContext.setResponseStatusCode(HttpStatus.UNAUTHORIZED.value());
        }
        return null;
    }
}
配置文件:
server:
  port: 9100
spring:
  application:
    name: config-server
  cloud:
    config:
      server:
        git:
          uri: 
          username: 
          password: 
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
management:
  endpoints:
    web:
      exposure:
        include: "*"
        
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {

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

}    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值