我怎样才能优雅地重启整个演员系统?换句话说,用一个gracefulStop(或至少是重要的那些)来阻止系统中的所有演员!
实际上,我希望在测试期间重新启动应用程序,而不必每次都启动新的单独JVM.
我正在使用Akka 2.0.5.
默认情况下,Akka在收到演员系统时会关闭演员系统SIGTERM.在关闭akka系统之前,如何覆盖此行为以执行自定义关闭逻辑?我已经在actor中实现了这个逻辑,使用了特殊的优雅停止消息 - 我只需要在SIGTERM收到时调用该逻辑.
或者我是否必须使用其他方式关闭应用程序?这也是一种选择.
我做了以下函数,该函数特定于IO monad:
memoIO :: MonadIO m => m a -> IO (m a)
memoIO action = do
ref <- newMVar Nothing
return $ do
x <- maybe action return =<< liftIO (takeMVar ref)
liftIO . putMVar ref $ Just x
return x
Run Code Online (Sandbox Code Playgroud)
用法示例:
main :: IO ()
main = do
p <- memoIO $ putStrLn "hello"
p
p
Run Code Online (Sandbox Code Playgroud)
打印" hello"一次.
我想(一个小小的烦恼)让它尽可能多地工作(不仅仅是IO).
我在hackage上发现了stateref,我的代码看起来像这样:
{-# LANGUAGE FlexibleContexts, FlexibleInstances, MultiParamTypeClasses, Rank2Types, UndecidableInstances #-}
import Data.MRef
class (NewMRef r m a, DefaultMRef r …Run Code Online (Sandbox Code Playgroud) 我是初学java程序员.我正在开发一个解密一些数据的应用程序.解密密钥被硬编码到软件中,因此可以通过分析字节码来看到.
我知道逆向工程不能完全防止,所以我要做的是尽可能地使这个过程变得更加困难.
我的想法不是直接将密钥放入我的代码中,而是让它经历某种转换.例如,我可以写 -
private static final byte[] HC256A = Hex
.decode("8589075b0df3f6d82fc0c5425179b6a6"
+ "3465f053f2891f808b24744e18480b72"
+ "ec2792cdbf4dcfeb7769bf8dfa14aee4"
+ "7b4c50e8eaf3a9c8f506016c81697e32");
Run Code Online (Sandbox Code Playgroud)
这样,看字节码的人无法立即读取它.但是必须遵循逻辑并对其应用转换,这在字节级别上不会那么容易.
那你觉得怎么样?这有用吗?除十六进制解码之外,最好的转换是什么?是否有其他方法可用于保护硬编码的解密密钥?
谢谢你的所有建议.
我试图使用Lift-Json自动将json对象反序列化为scala类,其中一个坐标类用于存储GeoJson信息.
case class Request(name:String, geometry:Geometry)
sealed abstract class Geometry
case class Point(coordinates:(Double,Double)) extends Geometry
case class LineString(coordinates:List[Point]) extends Geometry
case class Polygon(coordinates:List[LineString]) extends Geometry
Run Code Online (Sandbox Code Playgroud)
我想反序列化一个像这样的json字符串:
{
name:"test",
geometry:{
"type": "LineString",
"coordinates": [ [100.0, 0.0], [101.0, 1.0] ]
}
}
Run Code Online (Sandbox Code Playgroud)
在Geometry字段中使用正确的LineString运行时类进入Request case类.我想我应该使用TypeHint但是怎么样?这是正确的方法还是应该创建三个不同的Request(RequestPoint,RequestLineString和RequestPolygon)?这将是反序列化的Scala代码:
val json = parse(message)
json.extract[Request]
Run Code Online (Sandbox Code Playgroud) 你知道我怎样才能让一个对象只在一个特殊的类中变化?在这个例子中,我希望对象PrivateObject在类中只能变换(可递增)Box,而不是其他地方.有没有办法实现这个目标?
public class Box {
private PrivateObject prv;
public void setPrivateObject(PrivateObject p){
prv = p;
}
public void changeValue(){
prv.increment();
}
}
public class PrivateObject {
private value;
public increment(){
value++;
}
}
PrivateObject priv = new PrivateObject ();
Box box = new Box();
box.setPPrivateObject(priv);
box.changevalue();
priv.increment(); // I don't want it to be changeable outside the Box class!
Run Code Online (Sandbox Code Playgroud)
在C++中,我会将所有PrivateObject属性和方法Box设为私有,并将该类声明为该类的朋友PrivateObject.
我正在开发一个p2p聊天应用程序,它可以在DSL两个不同的NAT上正常工作,但是当涉及到3G USB互联网连接时,它就失败了.
我发现它不可能绕过3g网络的NAT,而Skype和种子等已知的p2p应用也无法绕过3g网络,每当遇到这些问题时,通过中央服务器发送数据.
我想知道3g网络的架构是什么.我听说他们没有私有IP,端口对只有公共IP,端口可用,一个公共端口可以分配给很多设备,我是否正确?如果是这样,服务器如何将数据发送到3g网络?
我刚刚对功能分支进行了一些更改,但我意识到我在错误的分支上。
如何获取我所做的最后一次提交,并将其移动到另一个已经存在的分支?我还没有推任何东西。
我见过一些类似的问题,但它们都涉及创建一个新分支,而且他们所做的所有硬头重置都令人恐惧。
我正在尝试向AWS API Gateway发送经过身份验证的请求.客户端将针对Cognito您的用户池进行身份验证,然后从与用户池中已登录用户对应的关联Cognito Identity Pool中获取令牌.我试图使用Postman模拟这样的请求.
这篇文章建议该命令aws cognito-identity get-credentials-for-identity可用于获取Postman签署请求所需的AccessKeyId和SecretKey.但是,当我尝试使用subCognito User Pool控制台中的用户属性运行它时:
$ aws cognito-identity get-credentials-for-identity --identity-id aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
An error occurred (ValidationException) when calling the GetCredentialsForIdentity operation: 1 validation error detected: Value 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee' at 'identityId' failed to satisfy constraint: Member must satisfy regular expression pattern: [\w-]+:[0-9a-f-]+
$ aws cognito-identity get-credentials-for-identity --identity-id us-east-1:aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
An error occurred (ResourceNotFoundException) when calling the GetCredentialsForIdentity operation: Identity 'us-east-1:aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee' not found.
Run Code Online (Sandbox Code Playgroud)
如果我尝试使用AWS控制台中显示的关联标识池中的标识ID(我选择了具有2个"链接登录"的标识),则会发生同样的情况.
amazon-web-services amazon-iam postman amazon-cognito aws-api-gateway
当我使用gcloud sdk在我的本地shell上运行一个简单的命令时.
$ kubectl get pod
Run Code Online (Sandbox Code Playgroud)
我收到这样的错误:
来自服务器的错误(禁止):禁止使用pod:用户"client"无法列出群集范围内的pod:未知用户"client"
相同的命令在GCP云shell上运行正常,并且输出
$ gcloud auth list
Run Code Online (Sandbox Code Playgroud)
如预期的那样:
Credentialed帐户
ACTIVE ACCOUNT
* foo@bar.com
我也尝试创建clusterrolebinding,但得到类似的错误.
akka ×2
java ×2
3g ×1
amazon-iam ×1
branch ×1
drm ×1
encryption ×1
friend ×1
git ×1
haskell ×1
ioref ×1
json ×1
kubernetes ×1
lift-json ×1
nat ×1
networking ×1
polymorphism ×1
postman ×1
scala ×1
security ×1
types ×1