solon 集成 activemq-client (sdk)
原始状态的 activemq-client sdk 集成非常方便,也更适合定制。就是有些同学,可能对原始接口会比较陌生,会希望有个具体的示例。
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-client</artifactId>
<version>${activemq.version}</version>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-pool</artifactId>
<version>${activemq.version}</version>
</dependency>
希望更加简化使用的同学,可以使用:
activemq-solon-cloud-plugin (使用更简单,定制性弱些)
1、添加集成配置
先使用 Solon 初始器 先生成一个 Solon Web 模板项目,然后添加上面的 activemq-client 依赖。再做个配置约定(也可按需定义):
- "solon.activemq",作为配置前缀
- "properties",作为公共配置
- "producer",作为生态者专属配置(估计用不到)
- "consumer",作为消费者专属配置(估计用不到)
具体的配置属性,参考自:ActiveMQConnectionFactory
solon.app:
name: "demo-app"
group: "demo"
# 配置可以自由定义,与 @Bean 代码对应起来即可(以下为参考)
solon.activemq:
properties: #公共配置(配置项,参考:ActiveMQConnectionFactory)
brokerURL: "failover:tcp://localhost:61616"
redeliveryPolicy:
initialRedeliveryDelay: 5000
backOffMultiplier: 2
useExponentialBackOff: true
maximumRedeliveries: -1
maximumRedeliveryDelay: 3600_000
添加 java 配置器
@Configuration
public class ActivemqConfig {
@Bean(destroyMethod = "stop")
public Connection client(@Inject("${solon.activemq.properties}") Props common) throws Exception {
String brokerURL = (String) common.remove("brokerURL");
String userName = (String) common.remove("userName");
String password = (String) common.remove("password");
ActiveMQConnectionFactory factory;
if (Utils.isEmpty(userName)) {
factory = new ActiveMQConnectionFactory(brokerURL);
} else {
factory = new ActiveMQConnectionFactory(brokerURL, userName, password);
}
//绑定额外的配置并创建连接
Connection connection = common.bindTo(factory).createConnection();
connection.start();
return connection;
}
@Bean
public IProducer producer(Connection connection) throws Exception {
return new IProducer(connection);
}
@Bean
public void consumer(Connection connection,
MessageListener messageListener) throws Exception {
Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
Destination destination = session.createTopic("topic.test");
MessageConsumer consumer = session.createConsumer(destination);
consumer.setMessageListener(messageListener);
}
}
activemq 的消息发送的代码比较复杂,所以我们可以做个包装处理(用于上面的配置构建),临时命名为 IProducer:
public class IProducer {
private Connection connection;
public IProducer(Connection connection) {
this.connection = connection;
}
public void send(String topic, MessageBuilder messageBuilder) throws JMSException {
Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
Destination destination = session.createTopic(topic);
MessageProducer producer = session.createProducer(destination);
producer.send(destination, messageBuilder.build(session));
}
@FunctionalInterface
public static interface MessageBuilder {
Message build(Session session) throws JMSException;
}
}
3、代码应用
发送(或生产),这里代控制器由用户请求再发送消息(仅供参考):
@Controller
public class DemoController {
@Inject
private IProducer producer;
@Mapping("/send")
public void send(String msg) throws Exception {
//发送
producer.send("topic.test", s -> s.createTextMessage("test"));
}
}
监听(或消费),这里采用订阅回调的方式:(仅供参考)
@Component
public class DemoMessageListener implements MessageListener {
@Override
public void onMessage(Message message) {
System.out.println(message);
RunUtil.runAndTry(message::acknowledge);
}
}
solon 集成 activemq-client (sdk)的更多相关文章
- 《连载 | 物联网框架ServerSuperIO教程》- 18.集成OPC Client,及使用步骤
1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...
- 从零开始学 Java - Spring 集成 ActiveMQ 配置(一)
你家小区下面有没有快递柜 近两年来,我们收取快递的方式好像变了,变得我们其实并不需要见到快递小哥也能拿到自己的快递了.对,我说的就是类似快递柜.菜鸟驿站这类的代收点的出现,把我们原来快递小哥必须拿着快 ...
- 从零开始学 Java - Spring 集成 ActiveMQ 配置(二)
从上一篇开始说起 上一篇从零开始学 Java - Spring 集成 ActiveMQ 配置(一)文章中讲了我关于消息队列的思考过程,现在这一篇会讲到 ActivMQ 与 Spring 框架的整合配置 ...
- 在Spring下集成ActiveMQ
1.参考文献 Spring集成ActiveMQ配置 Spring JMS异步发收消息 ActiveMQ 2.环境 在前面的一篇ActiveMQ入门实例中我们实现了消息的异步传送,这篇博文将如何在spr ...
- 在spring环境下集成ActiveMQ
1.参考文献 Spring集成ActiveMQ配置 Spring JMS异步发收消息 ActiveMQ 2.环境 在前面的一篇ActiveMQ入门实例中我们实现了消息的异步传送,这篇博文将如何在spr ...
- SpringBoot集成ActiveMQ
前面提到了原生API访问ActiveMQ和Spring集成ActiveMQ.今天讲一下SpringBoot集成ActiveMQ.SpringBoot就是为了解决我们的Maven配置烦恼而生,因此使用S ...
- Android Studio快速集成讯飞SDK实现文字朗读功能
今天,我们来学习一下怎么在Android Studio快速集成讯飞SDK实现文字朗读功能,先看一下效果图: 第一步 :了解TTS语音服务 TTS的全称为Text To Speech,即“从文本到语音” ...
- 【ActiveMQ】Spring Jms集成ActiveMQ学习记录
Spring Jms集成ActiveMQ学习记录. 引入依赖包 无论生产者还是消费者均引入这些包: <properties> <spring.version>3.0.5.REL ...
- Unity 下集成第三方原生 SDK,以极光厂商通道为例
Unity中集成三方SDK有两种方式: Unity 项目开发中时常有集成 Android 第三方 SDK 的需求,比如接入第三方推送,分享等功能.而第三方 SDK 的集成文档提到的往往是基于原生 An ...
- Spring集成ActiveMQ配置 --转
转自:http://suhuanzheng7784877.iteye.com/blog/969865 集成环境 Spring采用2.5.6版本,ActiveMQ使用的是5.4.2,从apache站点可 ...
随机推荐
- 课时05:Linux必备系统命令
- .NET云原生应用实践(一):从搭建项目框架结构开始
开篇 很早之前就想做一套案例,介绍.NET下如何从零开始搭建一个云原生的应用程序.不过这个话题有点大,会要包含很多内容.我本打算从新建一个ASP.NET Core Web API应用程序开始介绍,但又 ...
- element+vue2下的input的样式修改
/* 禁用下的input的字体颜色 */ /* .el-input.is-disabled /deep/ .el-input__inner { color: red; } */ /* 禁用下的inpu ...
- 洛谷P1381单词背诵
单词背诵 题目描述 灵梦有 \(n\) 个单词想要背,但她想通过一篇文章中的一段来记住这些单词. 文章由 \(m\) 个单词构成,她想在文章中找出连续的一段,其中包含最多的她想要背的单词(重复的只算一 ...
- 函数计算平台 OpenFunction 在自动驾驶领域的应用
嘉宾 | 霍秉杰 整理 | 王新 出品 | CSDN 云原生 2022 年 5 月 10 日,在 CSDN 云原生系列在线峰会第 4 期"ApacheSkyWalking 峰会"上 ...
- 负载均衡器 OpenELB ARP 欺骗技术解析
作者:大飞哥,视源电子运维工程师,KubeSphere 用户委员会广州站站长,KubeSphere Ambassador. K8S 对集群外暴露服务有三种方式:NodePort,Ingress 和 L ...
- EAFP 与 LBYL 风格
EAFP 与 LBYL 是两种"防御性处理机制",相信你一定接触过,只是可能没有深入思考过这个问题. 输入两个数,要输出相除后的结果: a, b = map(int, input( ...
- ABC365(D,E)
ABC365(D,E) D - AtCoder Janken 3 石头剪刀布,给出对手的出招,问在保证不败的情况下最多能赢多少回 记 \(f_i,{0/1/2}\) 表示第 \(i\) 局出石头/剪刀 ...
- 重温c语言之,7天开整,就是随便的写写,第三天+第四天版
一:指针 1.关于指针的含义---粗略 例如:int a=10; int* p=&a; 这里的*,是说明p是指针变量,int 说明p是指向的对象是int类型的 *p=20, 这里的*是解引用符 ...
- 无法访问k8s.gcr.io下载镜像问题解决办法
部署K8S最大的难题是镜像下载,在国内无FQ环境情况下很难从k8s.gcr.io等镜像源里下载镜像. 这种情况下正确做法是: 直接指定国内镜像代理仓库(如阿里云代理仓库)进行镜像拉取下载. 成功拉取代 ...