消息队列案例
首先我们书写一个业务层接口
定义的是发送消息
短信消息处理
package com.bigdata1421.message.service; public interface OrderService { void order(String id); }
创建业务层的实现类
并且我们要重写方法
这里就是打印日志 将消息打印在控制台
再写一个业务层接口
一个操作是把要发送短信的ID放到消息队列当中去
另一个操作是从消息队列中取出一个消息然后发送短信
这个核心是消息队列
package com.bigdata1421.message.service; public interface MessageService { void sendMessage(String id); String doMessage(); }
写这个业务层接口的实现类
package com.bigdata1421.message.service.impl; import com.bigdata1421.message.service.MessageService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class MessageServiceImpl implements MessageService { @Override public void sendMessage(String id) { } @Override public String doMessage() { return null; } }
这时我们要进行业务层实现类的代码补全
首先在订单中注入消息实现类对象
进行发信息
package com.bigdata1421.message.service.impl; import com.bigdata1421.message.service.OrderService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class OrderServiceImpl implements OrderService { @Autowired private MessageServiceImpl messageService; @Override public void order(String id) { //一系列的操作 包括各种服务调用 //处理各种业务 //短信消息处理 System.out.println("订单处理开始"); messageService.sendMessage(id); System.out.println("订单处理结束"); } }
但是我们的业务层实现类的代码不全
即我们刚刚书写的核心
我们还要进行一个补全
作为依赖注入的消息队列的实现类
我们进行补全
消息队列核心逻辑的处理
package com.bigdata1421.message.service.impl; import com.bigdata1421.message.service.MessageService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; @Service public class MessageServiceImpl implements MessageService { private ArrayList<String> msgList=new ArrayList<>(); @Override public void sendMessage(String id) { System.out.println("待发送的短信呼订单已纳入处理队列"); System.out.println("id:"+id); msgList.add(id); } @Override public String doMessage() { String id = msgList.remove(0); System.out.println("已完成短信发送业务"); System.out.println("id:"+id); return id; } }
但是我们还要进行测试
我们要书写一个表现层方法
在表现层开发注入业务层对象 OrderService
补全方法
方法就是放入一个消息
package com.bigdata1421.message.controller; import com.bigdata1421.message.service.OrderService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/orders") public class OrderController { @Autowired private OrderService orderService; @PostMapping("{id}") public void order(@PathVariable String id){ orderService.order(id); } }
接着我们还要写一个表现层
MessageController
这是做了消息处理
package com.bigdata1421.message.controller; import com.bigdata1421.message.service.MessageService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/msg") public class MessageController { @Autowired private MessageService messageService; @GetMapping public String doMessage(){ String id = messageService.doMessage(); return id; } }
接下来就是启动测试
我们是基于一个案例的场景执行我们的操作
我们启动postman进行测试
发送post请求
传入id
控制台打印
放入了id
我们再取出来
控制台打印