增加订单服务,并引用查找商品服务

增加订单服务

一、新建项目:

        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                                                

posted @ 2019-03-13 08:22  心目  阅读(380)  评论(0编辑  收藏  举报