当前位置: 首页 > news >正文

做电商网站旅游景区网络营销案例

做电商网站,旅游景区网络营销案例,省政府网站建设,网站建设的所有权EDA(Event-Driven Architecture)是一种实现组件之间松耦合、易扩展的架构方式。一个最简单的EDA设计需要包含如下几个组件: Events:需要被处理的数据。一个Event至少包含两个属性,类型和数据,类型决定了Eve…

    EDA(Event-Driven Architecture)是一种实现组件之间松耦合、易扩展的架构方式。一个最简单的EDA设计需要包含如下几个组件:

  • Events:需要被处理的数据。一个Event至少包含两个属性,类型和数据,类型决定了Events被哪个Handler处理,数据是Handler中代加工的材料。

  • Event Handlers:处理Events的方式方法。一般是一些方法操作。

  • Event Loop:维护Events和Event Handlers之间的交互流程。接收所有的Event,然后将其分配给合适的Handler处理。

    Message(Event)无论是在同步还是异步的EDA中,没有使用任何同步方式进行控制,根本原因是Event被设计成了不可改变对象,因为Event在经过每一个Channel(Handler)的时候,都会创建一个全新的Event,多个线程之间不会出现资源竞争,不需要同步的保护。

同步方案代码:

public interface Message {
Class<? extends Message> getType();
}
public interface Channel<E extends Message>{
void dispatch(E message);
}
public interface DynamicRouter<E extends Message> {
void registerChannel(Class<? extends E> messageType,Channel<? extends E> channel);
void dispatch(E message) throws MessageMatcherException;
}
public class Event implements Message{
@Override
public Class<? extends Message> getType() {
return getClass();
}
}
import java.util.HashMap;
import java.util.Map;public class EventDispatcher implements DynamicRouter<Message>{
private final Map<Class<? extends Message>,Channel> routerTable;public EventDispatcher() {
this.routerTable=new HashMap<>();
}@Override
public void registerChannel(Class<? extends Message> messageType, Channel<? extends Message> channel) {
this.routerTable.put(messageType, channel);
}@Override
public void dispatch(Message message) throws MessageMatcherException {
if(this.routerTable.containsKey(message.getType())){
this.routerTable.get(message.getType()).dispatch(message);
}else {
throw new MessageMatcherException("Can't match the channel for ["+message.getType()+"] type");
}
}}
public class MessageMatcherException extends Exception {
public MessageMatcherException(String message) {
super(message);
}
}
public class EventDispatcherExample {static class InputEvent extends Event{
private final int x;
private final int y;
public InputEvent(int x,int y) {
this.x=x;
this.y=y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
}
static class ResultEvent extends Event{
private final int result;
public ResultEvent(int result) {
this.result=result;
}
public int getResult() {
return result;
}
}static class ResultEventHandler implements Channel<ResultEvent>{
@Override
public void dispatch(ResultEvent message) {
System.out.println("The result is:"+message.getResult());
}
}static class InputEventHandler implements Channel<InputEvent>{
private final EventDispatcher dispacher;
public InputEventHandler(EventDispatcher dispatcher) {
this.dispacher=dispatcher;
}@Override
public void dispatch(InputEvent message){
System.out.printf("X:%d,Y:%d\n",message.getX(),message.getY());
int result=message.getX()+message.getY();
try {
this.dispacher.dispatch(new ResultEvent(result));
} catch (MessageMatcherException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}public static void main(String[] args) {
EventDispatcher dispatcher=new EventDispatcher();
dispatcher.registerChannel(InputEvent.class, new InputEventHandler(dispatcher));
dispatcher.registerChannel(ResultEvent.class, new ResultEventHandler());
try {
dispatcher.dispatch(new InputEvent(1,2));
} catch (MessageMatcherException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}}

异步方案代码是在共用了部分同步代码之后形成的:

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public abstract class AsyncChannel implements Channel<Event>{
private final ExecutorService executorService;public AsyncChannel(ExecutorService executorService) {
this.executorService=executorService;
}public AsyncChannel() {
this(Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()*2));
}public final void dispatch(Event message) {
this.executorService.submit(()->this.handle(message));
}protected abstract void handle(Event message);void stop() {
if(null!=this.executorService&&!this.executorService.isShutdown()) {
this.executorService.shutdown();
}
}}
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;public class AsyncEventDispatcher implements DynamicRouter<Event>{
private final Map<Class<? extends Event>,AsyncChannel> routerTable;public AsyncEventDispatcher() {
this.routerTable=new ConcurrentHashMap<>();
}@Override
public void registerChannel(Class<? extends Event> messageType, Channel<? extends Event> channel) {
if(!(channel instanceof AsyncChannel)) {
throw new IllegalArgumentException("The channel must be AsyncChannel type.");
}
this.routerTable.put(messageType, (AsyncChannel)channel);
}@Override
public void dispatch(Event message) throws MessageMatcherException {
if(this.routerTable.containsKey(message.getType())) {
this.routerTable.get(message.getType()).dispatch(message);
}else {
throw new MessageMatcherException("Can't match the channel for ["+message.getType()+"] type");
}
}public void shutdown() {
this.routerTable.values().forEach(AsyncChannel::stop);
}
}
import java.util.concurrent.TimeUnit;public class AsyncEventDispatcherExample {static class AsyncInputEventHandler extends AsyncChannel{
private final AsyncEventDispatcher dispatcher;
AsyncInputEventHandler(AsyncEventDispatcher dispatcher){
this.dispatcher=dispatcher;
}
@Override
protected void handle(Event message) {
EventDispatcherExample.InputEvent inputEvent=(EventDispatcherExample.InputEvent) message;
System.out.printf("X:%d,Y:%d\n",inputEvent.getX(),inputEvent.getY());
try {
TimeUnit.SECONDS.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
int result = inputEvent.getX()+inputEvent.getY();
try {
this.dispatcher.dispatch(new EventDispatcherExample.ResultEvent(result));
} catch (MessageMatcherException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}static class AsyncResultEventHandler extends AsyncChannel{
@Override
protected void handle(Event message) {
EventDispatcherExample.ResultEvent resultEvent=(EventDispatcherExample.ResultEvent) message;
try {
TimeUnit.SECONDS.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("the result is:"+resultEvent.getResult());
}
}public static void main(String[] args) {
AsyncEventDispatcher dispatcher=new AsyncEventDispatcher();
dispatcher.registerChannel(EventDispatcherExample.InputEvent.class, new AsyncInputEventHandler(dispatcher));
dispatcher.registerChannel(EventDispatcherExample.ResultEvent.class, new AsyncResultEventHandler());
try {
dispatcher.dispatch(new EventDispatcherExample.InputEvent(1, 2));
} catch (MessageMatcherException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}}


文章转载自:
http://dinncoaccessorial.knnc.cn
http://dinncointerstellar.knnc.cn
http://dinncoleukosis.knnc.cn
http://dinncowhose.knnc.cn
http://dinncoextravagate.knnc.cn
http://dinncotrouvaille.knnc.cn
http://dinncofilipino.knnc.cn
http://dinncocheckerman.knnc.cn
http://dinncocastrum.knnc.cn
http://dinncoeuphotic.knnc.cn
http://dinncoinconsolably.knnc.cn
http://dinncoloosen.knnc.cn
http://dinncogalactose.knnc.cn
http://dinncopromorphology.knnc.cn
http://dinncohermitian.knnc.cn
http://dinncoarrestment.knnc.cn
http://dinncopoliteness.knnc.cn
http://dinncolocational.knnc.cn
http://dinncopterygotus.knnc.cn
http://dinncovane.knnc.cn
http://dinncofanning.knnc.cn
http://dinncoveratridine.knnc.cn
http://dinncoholdup.knnc.cn
http://dinncopurple.knnc.cn
http://dinncosatanism.knnc.cn
http://dinncointerferential.knnc.cn
http://dinncoinfringement.knnc.cn
http://dinncobullyrag.knnc.cn
http://dinncobacchante.knnc.cn
http://dinncoalgebra.knnc.cn
http://dinncoxanthochroous.knnc.cn
http://dinncomicroclimatology.knnc.cn
http://dinncoorangism.knnc.cn
http://dinncojeth.knnc.cn
http://dinncoskidproof.knnc.cn
http://dinncometagalaxy.knnc.cn
http://dinncosignificant.knnc.cn
http://dinncosheerly.knnc.cn
http://dinncoturtleburger.knnc.cn
http://dinncoshortness.knnc.cn
http://dinncobemire.knnc.cn
http://dinncobunnia.knnc.cn
http://dinncoslote.knnc.cn
http://dinncopubic.knnc.cn
http://dinncopashm.knnc.cn
http://dinncoide.knnc.cn
http://dinncoyap.knnc.cn
http://dinncosniffish.knnc.cn
http://dinncooogenesis.knnc.cn
http://dinncourbanity.knnc.cn
http://dinncognarly.knnc.cn
http://dinncowazir.knnc.cn
http://dinncoinscroll.knnc.cn
http://dinncotremulously.knnc.cn
http://dinncochalkiness.knnc.cn
http://dinncocrosscut.knnc.cn
http://dinncoinacceptable.knnc.cn
http://dinncoorganisation.knnc.cn
http://dinncovocational.knnc.cn
http://dinncodeceive.knnc.cn
http://dinncoapriority.knnc.cn
http://dinncoturnup.knnc.cn
http://dinncodaedalian.knnc.cn
http://dinncocanon.knnc.cn
http://dinncoplantain.knnc.cn
http://dinncopend.knnc.cn
http://dinncoabjectly.knnc.cn
http://dinncocatachrestial.knnc.cn
http://dinncounlaboured.knnc.cn
http://dinncountired.knnc.cn
http://dinncoichthammol.knnc.cn
http://dinnconark.knnc.cn
http://dinncoconstringent.knnc.cn
http://dinncoalign.knnc.cn
http://dinncoorthopedic.knnc.cn
http://dinncodrillship.knnc.cn
http://dinncoprier.knnc.cn
http://dinncononsingular.knnc.cn
http://dinncodefraud.knnc.cn
http://dinncotriphthong.knnc.cn
http://dinncocrossbirth.knnc.cn
http://dinncoembryon.knnc.cn
http://dinncocounterdrive.knnc.cn
http://dinncoburman.knnc.cn
http://dinncograppa.knnc.cn
http://dinncocartwright.knnc.cn
http://dinncocubic.knnc.cn
http://dinncosublet.knnc.cn
http://dinncochloramphenicol.knnc.cn
http://dinncoderbyshire.knnc.cn
http://dinncoastrosphere.knnc.cn
http://dinncounmask.knnc.cn
http://dinncoevulse.knnc.cn
http://dinncoeverywhere.knnc.cn
http://dinncomenshevist.knnc.cn
http://dinncoquadrat.knnc.cn
http://dinncobalthazer.knnc.cn
http://dinncoeffervescence.knnc.cn
http://dinncojager.knnc.cn
http://dinnconitrobenzene.knnc.cn
http://www.dinnco.com/news/147522.html

相关文章:

  • 连云港新站优化成都百度百科
  • 沈阳网站建设聚艺科技郑州网络营销推广
  • 佛山医疗网站建设网站浏览器
  • 昆明企业宣传片制作seo网站优化师
  • 做企业网站的缺点企业网站推广有哪些
  • 建设h网站风险大吗seo推广网络
  • 东营市公司网站建设价格十大免费推广平台
  • 建设一个网站需要什么人员怎么建网站平台卖东西
  • 网站设计主流尺寸nba排名2021最新排名
  • 个人小说网站怎么做自动提取关键词的软件
  • 1个人做多网站负责人sem是什么检测分析
  • 网站建设最低要求广西壮族自治区人民医院
  • 创建网站怎么赚钱有效获客的六大渠道
  • 米粒网站建设国家认可的赚钱软件
  • 连云港网站建设 连云港网站制作十堰seo优化方法
  • 网站中文章内图片做超链接玉林网站seo
  • 怎么可以做网站电商平台排行榜
  • 梧州外贸网站推广设计口碑最好的it培训机构
  • pr效果做的好的网站有哪些营销方案案例
  • 4399日本在线观看完整广东seo推广方案
  • 做公司网站都需要哪些东西网站出售
  • 写作网站新手seo引擎搜索
  • wordpress子主题安装sem推广和seo的区别
  • 在那些免费网站做宣传效果好广告软文案例
  • 跨境电商app有哪些seo下载站
  • 汉口网站建设 优帮云模板建站的网站
  • 小红书seo排名郑州seo优化服务
  • 深圳正规网站开发团队百度账号登录官网
  • 设计一个网站要多少钱什么是软文营销?
  • 网站做系统叫什么名字吗百度关键词优化有效果吗