我正在尝试将Apache Artemis代理与Amazon MQ代理连接以创建混合架构。我尝试过将ActiveMQ与Amazon MQ连接,并且可以通过使用broker.xml文件中的“网络连接器”来实现它,并且效果很好。
为连接Amazon MQ和Artemis代理,我在Artemis broker.xml文件中添加了以下所示的“桥配置”和“连接器”
import 'package:flutter/material.dart';
import 'package:notifier_demo/components/TextFieldComp.dart';
import 'package:notifier_demo/models/user.dart';
import 'package:notifier_demo/notifier/UserNotifier.dart';
import 'package:provider/provider.dart';
class HomeMaterialScreen extends StatefulWidget {
@override
_HomeMaterialScreenState createState() => _HomeMaterialScreenState();
}
class _HomeMaterialScreenState extends State<HomeMaterialScreen> {
final _user = new User();
final _formKey = GlobalKey<FormState>();
@override
Widget build(BuildContext context) {
UserNotifier userNotifier= Provider.of<UserNotifier>(context);
return Scaffold(
appBar: AppBar(
title: Text('Profile'),
),
body: Container(
padding: const EdgeInsets.symmetric(vertical: 16, horizontal: 16),
child: Builder(
builder: (context) => Form(
key: _formKey,
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
Expanded(
child:TextFieldComp(_user),
),
Container(
padding: const EdgeInsets.fromLTRB(0, 50, 0, 20),
),
SwitchListTile(
title: const Text('Monthly newsletter'),
value: _user.newsletter,
onChanged: (bool val) =>
setState(() => _user.newsletter = val),
),
CheckboxListTile(
title: const Text('Coocking'),
value: _user.passions[User.PassionCooking],
onChanged: (val) => setState(
() => _user.passions[User.PassionCooking] = val),
),
CheckboxListTile(
title: const Text('Hiking'),
value: _user.passions[User.PassionHiking],
onChanged: (val) {
setState(() {
userNotifier.addUser(_user);
_user.passions[User.PassionHiking] = val;
});
}
),
Container(
padding: const EdgeInsets.symmetric(
vertical: 16, horizontal: 16),
child: RaisedButton(
onPressed: () {
final form = _formKey.currentState;
if (form.validate()) {
form.save();
_user.save();
_showDialog(context);
}
},
)
),
SizedBox(
child: ListView.builder(
itemBuilder: (BuildContext context,int index)=>Text('PlaceHolder for List'),
itemCount: userNotifier.userList.length,
)
),
],
),
))),
),
);
}
_showDialog(BuildContext context) {
Scaffold.of(context).showSnackBar(SnackBar(
content: Text('Submitting Form'),
));
}
}
我遇到一个例外:找不到 ssl模式。
所以我想了解连接Artemis和AmazonMQ代理是否与连接Activemq和AmazonMQ代理相同(即通过更改broker.xml文件中的配置)?如果是这样,我需要对上述配置进行哪些更改?
答案 0 :(得分:0)
ActiveMQ Classic(即5.x)和Amazon MQ使用OpenWire协议在代理网络中建立连接。 ActiveMQ Artemis支持使用OpenWire协议的客户端。但是,ActiveMQ Artemis使用其自己的“核心”协议进行桥接和群集。因此,您将无法建立从ActiveMQ Artemis到ActiveMQ Classic或Amazon MQ的桥梁,因为那些经纪人不了解Artemis的“核心”协议。
ssl
模式由OpenWire客户端使用,而不是“核心”客户端。这就是为什么您不能使用它创建Artemis桥的原因。
如果您想将Artemis和Amazon MQ集成在一起,我会推荐诸如Camel之类的东西,甚至可能会推荐Artemis附带的JMS桥。您可以在Artemis随附的this example中看到这两个示例。