zoukankan      html  css  js  c++  java
  • 增加订单服务,并引用查找商品服务

    增加订单服务

    一、新建项目:

            1、创建order_service项目

            2、开发伪下单接口

            3、使用ribbon. (类似httpClient,URLConnection)

     

                启动类增加注解

                 @Bean

                 @LoadBalanced

                 public RestTemplate restTemplate() {

                 return new RestTemplate();

                 }

            4、根据名称进行调用商品,获取商品详情

        

    二、操作方法:

    1、file->new->project

        Spring Initializer ->default

            点击next

    2、输入

        Group             项目名称一般为因为小写字母和数字结合luhq7.xdclass luhq7学习xdclass过程中增加的项目名称

        Artifact        具体组件 小写字母组合 order_server

        Type             选择 Maven Project

        其他的默认

            点击next

    3、选择web

        勾选web

    3、选择Cloud Discovery (服务发现)

        勾选Eureke Discovery

        勾选web

        勾选ribbon

        默认选择 spring boot版本

        点击next

    4、点击Finish

    5、点击New windows

    6、在file下setting-> Maven 设置Maven home directory 设置为maven

                        User setting file 设置为本地Maven中的setting

    7、开发下单接口

        增加三个package:controller、domain、service并在service下增加一个impl包

            在domain包下增加ProductOrder类并序列化( implements Serializable)

                增加属性,并增加属性对应的setter和getter

                private int productId;

                private String productName;

                private String tradeNo;

                private int price;

                private Date createTime;

                private int userId ;

                private String userName;

            在service包下增加类ProductOrderService,类型(kind)为interface

                并增加save方法

                     /**

                         * 下单接口

                         * @param userId

                         * @param productId

                         * @return

                         */

                        ProductOrder save(int userId,int productId);

            在impl包下增加类ProductOrderServiceImpl并实现ProductOrderService,使用implements ProductOrderService

            @Service 注释为服务发现,系统自动扫描到,实现代码为:

                        @Autowired #引用RestTemplate

                        private RestTemplate restTemplate;

                        @Override

                        public ProductOrder save(int userId, int productId) {

                            //获取商品详情TODO

     

                            //

                            // Object object=restTemplate.getForObject("http://product-service/api/v1/product/findById?id="+productId,Object.class);

                            //System.out.print(object);

                            //正式获取接口数据

                            //第一种获取方式

                            Map<String,Object> productMap = restTemplate.getForObject("http://product-service/api/v1/product/findById?id="+productId,Map.class);

                            //第二种获取方式

                    // ServiceInstance instance=loadBalancerClient.choose("product-service");

                    // String url=String.format("http://%s:%s/api/v1/product/findById?id="+productId,instance.getHost(),instance.getPort());

                    // RestTemplate restTemplate=new RestTemplate();

                    // Map<String,Object> productMap = restTemplate.getForObject(url,Map.class);

     

                            ProductOrder productOrder=new ProductOrder();

                            productOrder.setCreateTime(new Date());

                            productOrder.setUserId(userId);

                            productOrder.setProductId(productId);

                            productOrder.setTradeNo(UUID.randomUUID().toString());

                            productOrder.setProductName(productMap.get("name").toString());

                            productOrder.setPrice(Integer.parseInt(productMap.get("price").toString()));

                            return productOrder;

                        }

                在public class OrderserverApplication应用群里增加引用,实现负载均衡。

                    @Bean

                    @LoadBalanced

                    public RestTemplate restTemplate() {

                        return new RestTemplate();

                    }

                在controller包中增加类OrderController,增加注释:

                                @RestController

                                @RequestMapping("/api/v1/order")

                    增加服务,并和后台方法关联:

                     @Autowired

                            private ProductOrderService productOrderService;

                            @RequestMapping("save")

                            public Object save( @RequestParam("userId") int userId,@RequestParam("productId") int productId)

                            {

                                System.out.print(userId);

                                return productOrderService.save(userId,productId);

                            }

    8、找到src->main->resources->application.properties修改名为application.yml

                    右键 refactor->rename录入application.yml

                    server:

                     port: 8769

     

                    eureka:

                     client:

                        service-url:

                         defaultZone: http://localhost:7880/eureka

     

                    spring:

                     application:

                        name: order-service

    9、    在配置文件yml里面,自定义负载均衡策略

            #自定义负载均衡策略

            product-service:

             ribbon:

             NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

                策略选择:

            1、如果每个机器配置一样,则建议不修改策略 (推荐)

            2、如果部分机器配置强,则可以改为 WeightedResponseTimeRule                                                

  • 相关阅读:
    【开发者笔记】MQTT python测试笔记
    【工具】代码生成器-python脚本
    【开发者笔记】进制转换
    【开发者笔记】按List中存放对象的某一字段计数的问题
    【开发者笔记】二分法查找
    【数据库学习】聚合函数的使用
    【开发者笔记】学习区块链过程中的一些理解
    【spring学习】中文乱码问题
    【开发者笔记】我也来画一个手机
    【开发者笔记】java 利用jna调用c#的dll
  • 原文地址:https://www.cnblogs.com/programer-xinmu78/p/10520760.html
Copyright © 2011-2022 走看看